-
remove(): remove函数只管移除指定元素,位于指定元素后面的数据是直接copy到被移除的位置的,如:6 5 4 3 2 1 1 2 3 4 5 6 remove 3之后,就是 6 5 4 2 1 1 2 4 5 6 5 6 同时,begin()和end()所指均未改变,只能将remove()返回的iterator记录下来,进行resize, erase之类的操作或者调用容器本身的成员函数来进行操作,另外,unique()也是一个德行,谨记谨记
-
array<>调用其swap的时候,是线性复杂度,其置换之后,iterator和reference指向原来容器,但指向不同元素,如下代码:
-
array<int, 5> a({1,2,3});
-
array<int, 5> b({4,5,6});
-
cout<<addressof(*a.begin())<<"\t"<<addressof(*b.begin())<<endl;
-
a.swap(b);
-
cout<<addressof(*a.begin())<<"\t"<<addressof(*b.begin())<<endl;
-
cout<<"====================================="<<endl;
-
vector<int> va({1,2,3});
-
vector<int> vb({4,5,6});
-
cout<<addressof(*va.begin())<<"\t"<<addressof(*vb.begin())<<endl;
-
va.swap(vb);
-
cout<<addressof(*va.begin())<<"\t"<<addressof(*vb.begin())<<endl;
运行结果为:
-
0x22fdc0 0x22fda0
0x22fdc0 0x22fda0
=========================
0x2f6950 0x2f6970
0x2f6970 0x2f6950
这点可以看出,array<> swap之后实际存储位置没变,真正的交换了其内容,而vector<> swap之后存储元素的地址变了,并没有实际交换容器内的内容
另外: string的reserve()函数有可能会缩小其长度,但是vector却不会缩小
另外:判断一个表达式是左值还是右值,可以依靠在下一行,能否继续访问这个表达式 来进行判断
阅读(1677) | 评论(0) | 转发(0) |