一、简介
我们在学习C++的过程中,学到STL是必然的,那么STL的入门就是vector了。
vector是同一种类型的对象的集合,vector很像数组,空间是连续的,能非常高效和方便的访问单个元素,但是它支持动态增加和压缩数据,所以这是矛盾的,这个问题,我们会在后期的STL源码的分析中来讲解vector的内部实现。
vector 是一个类模板(class template)。使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。
vector需要的头文件是
#include <vector>
using std::vector
-------------------------------------------------------------------
二、 定义和初始化
vector< T> v; //默认为空,例如 vector<int> v;
vector<T> v2(v); 或v2=v1;
vector<T> v2(v1.begin(), v1.end());//v2是v1的一个副本, 若v1.size()>v2.size()则赋值后v2.size()被扩充为v1.size()。
vector< T > v3(n,i);//v3包含n个值为i的T类型元素
vector< T > v4(n); //v4含有n个值为0的元素
int a[4]={0,1,2,3,3}; vector<int> v5(a,a+5);
//v5的size为5,v5被初始化为a的5个值。后一个指针要指向将被拷贝的末元素的下一位置。
vector<int> v6(v5);//v6是v5的拷贝
vector< 类型 > 标识符(最大容量,初始所有值);
-------------------------------------------------------------------
三、vector常用成员函数:
size() :返回元素的个数
clear() :清除所有元素
empty() :判断是否为空
push_back() :在末尾添加一个元素
pop_back() :删除最后一个元素
erase() :删除某个元素
insert() :插入一个元素
[] :返回元素
= :复制副本
重载运算符:[]、=、<=、>=、>、<、!=、==、
-------------------------------------------------------------------
四、实例代码学习:
# include <iostream>
# include <vector>
# include <algorithm>
using namespace std;
typedef vector<int> INTVEC;
/*
vector's display function
void ShowVec(const INTVEC& v)
{
unsigned int i = 0;
for(i = 0; i < v.size(); ++i)
{
cout << v[i] << " ";
}
cout << endl;
}
*/
//利用迭代器进行显示
void ShowVec(const INTVEC& v)
{
//*it不能赋值,不能改写内容
INTVEC::const_iterator it;
//任何迭代器一般重载了不等号运算符
//for(it = v.begin(); it < v.end(); ++it )
for(it = v.begin(); it != v.end(); ++it )
{
cout << *it << " ";
}
cout << endl << endl;
}
int main(void)
{
INTVEC v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
cout << "Show current element : " ;
ShowVec(v);
cout << endl;
cout << "print the last element: "<< v.back() << endl; cout << endl;
cout << "pop the last element!!!";
v.pop_back();
cout << endl << endl;
cout << "Show current element : " ;
ShowVec(v);
cout << "erase element !!! ";
v.erase(v.begin() + 2); //移除一个元素
cout << endl;
cout << "Show current element : " ;
ShowVec(v);
return 0;
}
-----------------------------------------------------------
运行结果:
-----------------------------------------------------------
最后补充一点关于迭代器的知识:
1、容器一般都支持迭代器操作
2、通过迭代器来遍历容器
3、string也可以理解为容器,只是通常当成字符串类
4、迭代器可以理解为容器的指针
5、迭代器可以理解泛型程序指针
6、vector<int> 等价为 int*
7、有些不是这样等价的
8、任何迭代器一般重载了不等号运算符
9、++运算符的重载
后置++多了一次临时对象的构造,效率低
前置++无临时对象的构造
-----------------------------------------------------------