STL:序列式容器vector笔记

版权声明:所有文章版权归属博主个人 https://blog.csdn.net/weixin_41143631/article/details/88669704

迭代器:看文档http://www.cplusplus.com/reference/vector/vector/

图借用侯捷的源码剖析,我学习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 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_41143631/article/details/88669704