STL中swap操作交换两个相同类型容器的内容,两个容器的元素将会将换。
需要注意的是相同的容器类型和相同的元素类型。
下边以具体实例说明:
1.相同的容器类型相同的元素类型
结果如图所示,str1和str2交换了元素。但是可以发现指向容器的迭代器并没有指向交换后的元素,而是依然指向原先的元素,这是因为swap并没有交换元素本身,而是只交换了两个容器的内部数据结构。所以迭代器并没有实效,对指针和引用一样。
2.相同的容器类型不同的元素类型
编译不通过,不能使用swap交换。
因为swap操作对string和array的调用与其他容器不同所以一下分析对array 和string 的swap调用。
3.对array调用swap
结果如上图所示,元素交换了。迭代器所指向的元素的值变化了,根据C++ primer所述,对array调用swap,swap会将arrar的元素一一交换是真正的交换元素,所需的时间跟元素的多少成正比。
4.对string调用swap
结果如图所示,迭代器所指的元素没有改变,故应该跟一般的容易一样,元素本身应该并未交换,但根据C++ primer 303页所述,应该是会导致迭代器失效。
希望有明白这个问题的大牛不吝赐教。