vector向量容器
作为数组的一个泛化推广的vector容器,不仅可以数组一样的元素随机访问,还可以在容器的尾端插入新元素
vector是一个简单,高效的容器,在尾端插入和删除元素,算法时间复杂度为O(1)常数阶,其他元素的插入和删除为O(n)的线性阶,其中n为容器的元素个数,vector具有自动的内存管理功能,对于元素的插入和删除,可动态的调整所占用的内存空间。
vector技术原理
vector容器是一个线性结构,用3个指针存放向量的起始字节位置,当前最后一个向量元素的末尾字节和整个容器所占用的内存空间的末尾字节,3个指针变量分别为m_start,m_finish和m_end_of_storage
vector应用基础
创建vector对象
1 vector<int> v;
2 vector<double> v(10); //创建一个具有10个元素的vector对象,每个元素默认值为0.0
3 vector<double> v(10,9.3); //创建一个具有10个元素的vector对象,每个元素默认值为9.3
4 vector<char> v1(5,'k');
vector<char> v2(v1);
初始化赋值
vector提供push_back函数,常用来进行vector容器的初始化,push_back函数在容器的尾端插入新元素
元素的遍历访问
vector的元素可采用数组或者迭代器的访问进行遍历访问.
1 #include<vector> 2 #include<iostream> 3 int main() 4 { 5 using namespace std; 6 vector<int> v; 7 v.push_back(20); 8 v.push_back(26); 9 v.push_back(39); 10 for(int i=0;i<v.size();i++) 11 { 12 cout<<"v[" <<i <<"]=" <<v[i] <<endl; 13 } 14 return 0; 15 } 16 #include<vector> 17 #include<iostream> 18 int main() 19 { 20 using namespace std; 21 vector<int> v; 22 v.push_back(20); 23 v.push_back(26); 24 v.push_back(39); 25 vector<int>::iterator i,iend; 26 iend = v.end(); 27 int j; 28 for(i = v.begin(),j = 0;i != iend;i++,j++) 29 { 30 cout<<"v[" <<j <<"]=" <<*i <<endl; 31 } 32 return 0; 33 }
vector提供了begin()和end()函数用于获取首元素的迭代器和最后一个元素的下一位置的迭代器
元素的插入
不同于在vector容器尾部添加元素的push_back函数,insert函数可在函数的任意位置插入元素,由于插入时先将插入位置后的元素移位,以空出一个位置进行插入,因此,insert函数的执行较push_back函数稍为耗时.
1 #include<vector> 2 #include<iostream> 3 int main 4 { 5 using namespace std; 6 vector<int> v; 7 v.push_back(6); 8 v.push_back(7); 9 v.push_back(8); 10 v.push_back(10); 11 v.insert(v.begin()+3,9); //在元素10的前面插入9 12 v.insert(v.begin(),5); //插入5为首元素 13 v.insert(v.end(),11); //插入11为末元素 14 for(int i = 0;i < v.size();i++) 15 { 16 cout<<"v[" << i <<"]=" <<v[i] <<endl; 17 } 18 return 0; 19 }
在C++中有一些容器可以直接用的 如:queue stack priority_queue deque set map
等。 在这里我将说说vector;
vector<class T> vec; 这是定义一个空的向量, 方法有:size , push_back,pop_back; erase,empty,begin,end 返回迭代器 等等, 还可以直接的下标操作 如:vec[i];还有就迭代器了 vector<class T>::iterartor it=vec.bengin();
还是看看例子吧:
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 int main() 5 { 6 vector<int> vec; 7 int a; 8 while(cin>>a) 9 { 10 vector.push_back(a);//vector是自动分配空间的 11 } 12 for(int i=0;i<vec.size();i++) 13 cout<<vec[i]<<endl; 14 vec.pop_back(); 15 for(int i=0;i<vec.size();i++) 16 cout<<vec[i]<<endl; 17 return 1; 18 }
当输入是:1 2 3 4 5 时
输出是:
1
2
3
4
5
1
2
3
4
by: null
2013年7月15日20:53:39
转自:http://www.360doc.com/resaveArt.aspx?articleid=103447810&isreg=1
浙公网安备 33010602011771号