首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++中使用std::vector::swap方法交换两个不同的向量安全吗?

在C++中使用std::vector::swap方法交换两个不同的向量安全吗?
EN

Stack Overflow用户
提问于 2019-12-20 17:07:46
回答 6查看 4.3K关注 0票数 31

假设您有以下代码:

代码语言:javascript
运行
复制
#include <iostream>
#include <string>
#include <vector>

int main()
{
    std::vector<std::string> First{"example", "second" , "C++" , "Hello world" };
    std::vector<std::string> Second{"Hello"};

    First.swap(Second);

    for(auto a : Second) std::cout << a << "\n";
    return 0;
}

假设向量不是std::string,而是类:

代码语言:javascript
运行
复制
std::vector<Widget> WidgetVector;

std::vector<Widget2> Widget2Vector;

std::vector::swap方法交换这两个向量仍然安全吗:WidgetVector.swap(Widget2Vector);还是会导致UB?

EN

Stack Overflow用户

发布于 2019-12-21 22:44:28

using std::swap; swap(a, b);a.swap(b);的语义与后者完全相同,至少对于任何正常的类型都是如此。在这方面,所有标准类型都是正常的。

除非您使用有趣的分配器(意思是有状态的,不总是相等的,并且没有在容器交换上传播,请参阅std::allocator_traits),否则使用相同的模板交换两个std::vector-参数只是三个值(容量、大小和数据指针)的无聊交换。并且交换基本类型,没有数据竞争,是安全的,不能抛出。

标准甚至保证了这一点。见std::vector::swap()

票数 0
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59428993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档