【轉】vector向量知識

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();
  仍是看看例子吧:ios

 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:39spa

轉自:http://www.360doc.com/resaveArt.aspx?articleid=103447810&isreg=1指針

相關文章
相關標籤/搜索