声明:文章中编程环境均为VS2013编译器
vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。首先我们来看一下vector的接口:
1、使用vector需要添加头文件#include<vector>
2、vector的初始化:
vector<int> v; //定义一个存放整形的向量(尖括号中为元素类型名,它可以是任何合法的数据类型),未给定大小,默认大小为0
vector<int> v(5); //定义了5个整型元素的向量,但没有给出初值,其值是不确定的。
vector<int> v(5,1); //定义了5个整型元素的向量,且给出每个元素的初值为1
3、简单的vector接口的使用
v.begin( ):返回迭代器的起始位置
v.end( ):返回迭代器最后一个元素下一个位置
v.size( ):返回其大小
从向量中读取元素
1、通过下标方式读取
void printf_vector()
{
for(size_t = 0;i<v.size();i++)
{
cout<<v[i]<<" ";
}
cout<<endl;
}
2、通过遍历器方式读取
void print_vector(const vector<T>& v)
{
vector<int>:: const_iterator it = v.begin();
while(it != v.end())
{
cout<<*it<<" ";
it++;
}
cout<<endl;
}
v.push_back(1); //在v的最后一个容器后插入一个元素,其值为1
v.pop_back(); //删除v容器的最后一个元素
void test_vector()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
print_vector(v);
v.pop_back();
print_vector(v);
}
运行结果:
a.size():返回v中元素的个数
v.capacity( ):返回v最多能存储的容量大小
v.rezize(5); //将v的现有元素个数改为5个,如果改变后的大小大于原来的大小,则补上,并且补上的值为0(在vs2013编译器下),如果改变后的大小小于原来的大小,则删掉多余的
void test_vector()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
print_vector(v);
v.resize(5);
cout<<"capacity:"<<v.capacity()<<endl;
cout << "size:" << v.size() << endl;
print_vector(v);
}
void test_vector()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
print_vector(v);
v.resize(3);
print_vector(v);
}
v.rezize(5,2); //将v的现有元素个数改为5个,如果改变后的大小大于原来的大小,则补上,并且补上的值为10,如果改变后的大小小于原来的大小,则删掉多余的
void test_vector()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
print_vector(v);
v.resize(5,10);
print_vector(v);
}
运行结果:
v.reserve(10):改变v容器的容量大小为10。只开辟,不初始化。
void test_vector()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
print_vector(v);
v.resize(5);
v.reserve(10);
print_vector(v);
}
v.insert(v.begin()+1,10):在v的第1个元素(从第0个算起)的位置插入数值10
v.insert(v.begin()+1,5,10); //在v的第1个元素(从第0个算起)的位置插入5个数,其值都为10
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
print_vector(v);
v.insert(v.begin() + 1,10);
print_vector(v);
v.insert(v.begin() + 1, 5, 10);
print_vector(v);
}
运行结果:
v.insert(v.begin()+1,b+2,b+5); //b为数组,在v的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元su
vector<int> v;
int b[] = { 1, 2, 3, 4, 5, 6, 7 };
v.push_back(1);
v.push_back(2);
v.push_back(3);
print_vector(v);
v.insert(v.begin() + 1, b + 2, b + 5);
print_vector(v);
v.erase(v.begin()+1,v.begin()+3):删除v中第1个(从第0个算起)到第2个元素,也就是说删除的元素从v.begin()+1算起(包括它)一直到v.begin()+ 3(不包括它)
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
print_vector(v);
v.erase(v.begin() + 1, v.begin() + 3);
print_vector(v);
v.back(); //返回v的最后一个元素
v.front(); //返回v的第一个元素
void test_vector()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
print_vector(v);
v.reserve(10);
cout << v.front() << endl;
cout << v.back() << endl;
}
v.clear():清空v中的元素
v.empty():判断v是否为空,空则返回ture,不空则返回false
v.swap(b):b为容器,将v中的元素和b中的元素进行整体性交换
void test_vector()
{
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
vector<int> v1;
v1.push_back(6);
v1.push_back(7);
v1.push_back(8);
print_vector(v);
print_vector(v1);
v.swap(v1);
print_vector(v);
print_vector(v1);
v[i]:返回v的第i个元素,当且仅当v[i]存在
vector<int> v;
for (int i = 0; i < 10; i++)
{
v[i] = i;//这种做法以及类似的做法都是错误的。下标只能用于获取已存在的元素,而现在的a[i]还是空的对象,运行会报错
}