STL中vector的用法

vector应该是STL种最常用的容器了,可以当做数组来看待,只不过vector的元素更丰富,不仅仅是数据元素,还可以是结构体

1、vector的创建和初始化

vector <double> v;//创建一个double类型的vector
vector <int> v2(5);//创建一个含有5个元素的int型vector,初始值默认为0
vector <int> v3(4,7);//创建一个含有4个元素的int型vector,初始值都为7

当然也可以通过在尾部添加元素来初始化

vector <double> v;
v.push_back(3.5);
v.push_back(4.9);
v.push_back(1.5);//其中v[0] = 3.5 v[1] = 4.9 v[2] = 1.5

2、vector的元素遍历

vector <double> v;
v.push_back(3.5);
v.push_back(4.9);
v.push_back(1.5);
//下标访问
for(int i = 0; i < v.size();i++)
{
	cout << v[i] << endl;
}
//const迭代器访问
for(vector <double>::const_iterator it = v.begin(); it !=v.end();it++)
{
	cout << *it << endl;
}
//非const迭代器访问
for(vector <double>::iterator it = v.begin(); it !=v.end();it++)
{
	cout << *it << endl;
}
//逆序访问,同样分为const和非const
for(vector <double>::reverse_iterator it = v.rbegin(); it !=v.rend();it++)
{
	cout << *it << endl;
}

说明一下,其中的const和非const迭代器在访问元素时没有区别,只是非const迭代器可以通过*it = value来改变vector元素的值

3、vector的插入操作

v.insert(v.begin()+2,5); //在索引为2(从0开始)的位置插入元素5
v.insert(v.begin(),2,3);//在索引为0的位置插入2个值为3的元素

4、vector的删除

v.erase(v.begin()+i);//删除索引为i的元素
vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始
vec.clear();//删除所有元素

举个例子,删除double类型的vector中与指定值key相等的元素

vector <double> v;
v.push_back(3.5);
v.push_back(4.9);
v.push_back(1.5);
v.push_back(3.5);
v.push_back(3.5);
v.push_back(4.9);
v.push_back(3.5);
double key = 3.5;
const double MIN = 0.00000001;
//索引删除
for(int i =0; i<v.size();i++)
{
	if((v[i] - key < MIN) && (v[i] -key > -MIN)) //double类型,需要定义一个精度
	{
		v.erase(v.begin()+i);
		i--;//假设[2,3,4]删除元素3,其索引为2,删除3后,元素4成了索引2对应的值,所以减一
		cnt++;
	}
}
//或者用迭代器删除
for(it = v.begin();it != v.end();)
{
	
	if((*it - key < MIN) && (*it -key > -MIN)) 
	{
		it = v.erase(it); //删除函数返回的是下一个元素的迭代器
		cnt++;
	}
	else
	{
		it++;
	}	

}

  5、

猜你喜欢

转载自www.cnblogs.com/xqn2017/p/9152537.html