C++11新特性——容器相关(二)swap
2016-12-01 08:46
197 查看
swap
新标准中提供了非成员版本的swap操作,此操作对array容器,会交换元素的值;对其他容器,则只交换容器的内部结构,并不进行元素值的拷贝操作,所以在这种情况下是非常迅速的。正因如此,当swap
array后,原来array上的迭代器还依然指向原有元素,只是元素的值变了;而swap非array容器之后,原来容器上的迭代器将指向对方容器上的元素,而指向的元素的值却保持不变。
swap操作交换两个相同类型容器的内容。调用swap之后,两个容器中的元素将会交换:
vector<string> svec1(10);// 10个元素的vector
vector<string> svec2(24);// 24个元素的vector
swap (svec1, svec2);
调用swap后,svec1将包含24个string元素,svec2将包含10个string。除array外,交换两个容器内容的操作保证会很快——元素本身并未交换,swap只是交换了两个容器的内部数据结构。除array外,swap不对任何元素进行拷贝、删除或插入操作,因此可以保证在常数时间内完成。
元素不会被移动的事实意味着,除string外,指向容器的迭代器、引用和指针在swap操作之后都不会失效。它们仍指向swap操作之前所指向的那些元素。但是,在swap之后,这些元素已经属于不同的容器了。例如,假定iter在swap之前指向svec1[3]的string,那么在swap之后它指向svec2
[3]的元素。与其他容器不同,对一个string调用swap会导致迭代器、引用和指针失效。
与其他容器不同,swap两个array会真正交换它们的元素。因此,交换两个array所需的时问与array中元素的数目成正比。因此,对于array,在swap操作之后,指针、引用和迭代器所绑定的元素保持不变,但元素值已经与另一个array中对应元素的值进行了交换。
在新标准库中,容器既提供成员函数版本的swap,也提供非成员版本的swap。而早期标准库版本只提供成员函数版本的swap。非成员版本的swap在泛型编程中是非常重要的。统一使用非成员版本的swap是一个好习惯。
新标准中提供了非成员版本的swap操作,此操作对array容器,会交换元素的值;对其他容器,则只交换容器的内部结构,并不进行元素值的拷贝操作,所以在这种情况下是非常迅速的。正因如此,当swap
array后,原来array上的迭代器还依然指向原有元素,只是元素的值变了;而swap非array容器之后,原来容器上的迭代器将指向对方容器上的元素,而指向的元素的值却保持不变。
swap操作交换两个相同类型容器的内容。调用swap之后,两个容器中的元素将会交换:
vector<string> svec1(10);// 10个元素的vector
vector<string> svec2(24);// 24个元素的vector
swap (svec1, svec2);
调用swap后,svec1将包含24个string元素,svec2将包含10个string。除array外,交换两个容器内容的操作保证会很快——元素本身并未交换,swap只是交换了两个容器的内部数据结构。除array外,swap不对任何元素进行拷贝、删除或插入操作,因此可以保证在常数时间内完成。
元素不会被移动的事实意味着,除string外,指向容器的迭代器、引用和指针在swap操作之后都不会失效。它们仍指向swap操作之前所指向的那些元素。但是,在swap之后,这些元素已经属于不同的容器了。例如,假定iter在swap之前指向svec1[3]的string,那么在swap之后它指向svec2
[3]的元素。与其他容器不同,对一个string调用swap会导致迭代器、引用和指针失效。
与其他容器不同,swap两个array会真正交换它们的元素。因此,交换两个array所需的时问与array中元素的数目成正比。因此,对于array,在swap操作之后,指针、引用和迭代器所绑定的元素保持不变,但元素值已经与另一个array中对应元素的值进行了交换。
在新标准库中,容器既提供成员函数版本的swap,也提供非成员版本的swap。而早期标准库版本只提供成员函数版本的swap。非成员版本的swap在泛型编程中是非常重要的。统一使用非成员版本的swap是一个好习惯。
相关文章推荐
- C++11中容器相关特性
- C++11新特性——容器相关(三)tuple
- C++11新特性之容器相关(一)
- C++ 11 新特性之容器相关特性
- C++11新特性--线程库相关
- C++11特性--基于范围的for循环,新的STL容器,新的STL方法( cbegin(),cend(),crbegin(),crend())
- IOC容器其他相关特性设计与实现
- C++11新特性应用--介绍几个新增的便利算法(不更改容器中元素顺序的算法)
- C++11新特性应用--介绍几个新增的便利算法(更改容器中元素顺序的算法)
- C++11新特性应用--介绍几个新增的便利算法(不更改容器中元素顺序的算法)
- C++11新特性应用--介绍几个新增的便利算法(更改容器中元素顺序的算法)
- C++ 11 新特性之容器相关特性
- C++11新特性应用--介绍几个新增的便利算法(不更改容器中元素顺序的算法)
- 性能特性测试系列1——STL容器,QT容器性能相关比较和总结
- (一)Spring核心-容器其他相关特性
- 容器其他相关特性的设计和实现
- 【C++】C++11特性:初始化、hash容器和随机数生成器
- JMS相关特性
- Sprite 3D用法和相关特性详解
- 一些C++11语言新特性 - Uniform Initialization