版权声明:所有文章版权归属博主个人 https://blog.csdn.net/weixin_41143631/article/details/88669704
图借用侯捷的源码剖析,我学习STL的知识来源就是他的书
vector迭代器的几种失效的情况:
1.当插入(push_back)一个元素后,end操作返回的迭代器肯定失效。
2.当插入(push_back)一个元素后,capacity返回值与没有插入元素之前相比有改变,则需要重新加载整个容器,此时first和end操 作返回的迭代器都会失效。
3.当进行删除操作(erase,pop_back)后,指向删除点的迭代器全部失效;指向删除点后面的元素的迭代器也将全部失效
看代码:
void test_vector()
{
vector <int> v{ 1,2,3,4,5,6,7 };
//cout << *(v.rbegin()++);
printf("%d", sizeof(v));
printf("\n-------------------------\n");
string s1;
s1.resize(10);
transform(v.begin(), v.end(), s1.begin(), [](int i)->char{
if (i % 2 == 0)i++;
i=i%10;
return i+'0' ; });
int ret=atoi(s1.c_str());
vector<int> v1;
v1.reserve(10);
transform(v.begin(), v.end(), v.begin(), [](int i) -> int{
if (i >2)
return --i;
else
return i;
});
for (auto e : v)
{
printf("%d->",e);
}
cout << ret;
v1.reserve(20);
cout << "v1的容量" << v1.capacity() << "\n";
cout << "v1的size" << v1.size();
}
resize (void resize (size_type n, value_type val = value_type());)改变size大小,没有resize,push几个(初始化几个就是多大)
reserve(void reserve (size_type n))改变容量(capacity)大小,扩容倍率和虚表类似,看编译器自己实现,可2倍可1.5倍。
iterator insert (iterator position, const value_type& val); //在position之前插入val
扫描二维码关注公众号,回复: 5591577 查看本文章