0
点赞
收藏
分享

微信扫一扫

C++ 容器赋值运算符

C++ 容器赋值运算符_拷贝构造

▲ 《C++ Primer》 P302

assign

list<string> names;
vector<const char *> old_c_str{ "娃哈哈", "孟菲斯", "Hello Wold!" };
names.assign(old_c_str.cbegin(), old_c_str.cend()); // 这个可以,拷贝构造
for (const auto s : names)
{
    cout << s << '\n';
}

输出:

娃哈哈
孟菲斯
Hello Wold!

swap

swap 操作交换两个相同类型容器的内容。调用 swap 之后,两个容器中的元素将会交换:

vector<string> svecl(10); //10个元素的vector
vector<string> svec2(24); //24个元素的vector
swap(svecl,svec2);

调用swap后,svec1 将包含24个string元素, svec2 将包含10个string.除array外,交换两个容器内容的操作保证会很快 -- 元素本身并未交换,swap只是交换了两个容器的内部数据结构

除array外,swap对任何元素进行拷贝、删除或插入操作,因此可以保证在常数时间内完成。

Note:

元素不会被移动的事实意味着,除string外,指向容器的迭代器、引用和指针在swap 操作之后都不会失效。它们仍指向 swap 操作之前所指向的那些元素。但是,在 swap 之后,这些元素已经属于不同的容器了。例如,假定 iter 在 swap 之前指向 svec1[3] 的 string, 那么在 swap 之后它指向 svec2[3] 的元素。与其他容器不同,对一个 string 调用 swap 会导致迭代器、引用和指针失效。



举报

相关推荐

0 条评论