首页 > 代码库 > 关于C++的vector的实例学习
关于C++的vector的实例学习
一、简介
我们在学习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、++运算符的重载
后置++多了一次临时对象的构造,效率低
前置++无临时对象的构造
-----------------------------------------------------------
本文出自 “享受科技带来的快乐” 博客,请务必保留此出处http://liam2199.blog.51cto.com/2879872/1426780