vector

1.vector创建对象:
vector<int> v1;
2.在末尾增加数据:push_back:

  push_back( const T& value );

v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v1.push_back(4);
 3.删除末尾数据:pop_back:

 pop_back();

 vector<int> numbers;
 
 numbers.push_back(5);
 numbers.push_back(3);
 numbers.push_back(4);

 numbers.pop_back();
 
 print(numbers);
 [ 5 3 4 ]
 [ 5 3 ]
 4.vector大小:size():

 size_type size() const;

vector<int> nums {1, 3, 5, 7};
 
cout << "nums contains " << nums.size() << " elements.\n";

4
5.插入数据:insert:

 insert( const_iterator pos, const T& value );

v.insert(v.begin(), 0);
v.insert(v.begin(), -1);
for (auto e : v)
{
	cout << e << " ";
}
cout << endl;
 6.删除数据:erase:

 erase( iterator pos );

v.erase(v.begin());
for (auto e : v)
{
	cout << e << " ";
}
cout << endl;
7.调整大小:resize:

void resize( size_type count );

void resize( size_type count, const value_type& value );

调整容器的大小以包含计数元素,如果计数 == size.

如果当前大小大于计数,容器被减少到它的第一个计数元素。

如果当前大小小于计数,

1)附加其他默认插入的元素。
2)其他副本价值被附加。
std::vector<int> c = {1, 2, 3};
print("The vector holds: ", c);
 
c.resize(5);
print("After resize up to 5: ", c);
c.resize(2);
print("After resize down to 2: ", c);
c.resize(6, 4);
print("After resize up to 6 (initializer = 4): ", c);

The vector holds: 1 2 3
After resize up to 5: 1 2 3 0 0
After resize down to 2: 1 2
After resize up to 6 (initializer = 4): 1 2 4 4 4 4
 8.查找数据:
vector<int>::iterator pos = find(v.begin(), v.end(), 5);

 9.迭代器:iterator:三种类型迭代器,本质上就是指针

1.普通正向迭代器 可读可写
 

vector<int>::iterator it = v.begin();
while (it != v.end())
{
	cout << *it << " ";
	++it;
}
cout << endl;
Print_vector(v);

2.reverse(逆置)反向迭代器:reverse_iterator:
 

vector<int>::reverse_iterator rit = v.rbegin();
while (rit != v.rend())
{
	cout << *rit << " ";
	++rit;
}
cout << endl;

3.正向只读迭代器:const_iterator
 

vector<int>::const_iterator it = vt.begin();
while (it != vt.end())
{
	cout << *it << " ";
	++it;
}
cout << endl;

 10.遍历修改数据:


1.operator[]+size

for (size_t i = 0; i < v.size(); i++)
{
	v[i] *= 2;
	cout << v[i] << " ";
}
cout << endl;

2.(正向)迭代器:iterator

vector<int>::iterator it = v.begin();
while (it != v.end())
{
	cout << *it << " ";
	++it;
}
cout << endl;

3.范围for:底层是被编译器替换成迭代器方式遍历支持
 

for (auto e : v1)
{
	cout << e << " ";
}
cout << endl;

10.迭代器失效:

1.在迭代器后面继续push_back元素。

//这种迭代器失效的解决方法只能是在迭代器前面push_back,否则就出问题
void test_vector8()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);

	vector<int>::iterator it = v.begin();
	v.push_back(6);
	v.push_back(7);
	while (it != v.end())
	{
		cout << *it << " ";
		++it;
	}
	cout << endl;
}

2.迭代器位置不对。

//迭代器失效
void test_vector9()
{
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);
	v.push_back(6);

	//要求删除容器中的所有偶数
	vector<int>::iterator it = v.begin();
	while (it != v.end())
	{
		if (*it % 2 == 0)
		{
			//v.erase(it);//删除it之后,it就失效了,这里的失效是it的位置不对了,再++it就不行,vs下报错了,是编译检查的,一定报错
						//gcc下面没有进行严格的检查,可能会报错,可能会正常运行,也有可能有个别偶数没有被删除调


			it = v.erase(it);//erase会返回删除的it的下一个位置的迭代器,这种才不会失效
		}
		++it;
	}
	for (auto e : v)
	{
		cout << e << " ";
	}
	cout << endl;
	//总结:不管哪个平台,earse(it)之后,it就失效了,只是导致的结果不一样而已,总之有各种各样的问题
}

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值