vector
特點:
1.可變長的動態陣列
2.使用時包含標頭檔案 #include
3.支援隨機訪問迭代器
• 根據下標隨機訪問某個元素時間為常數
• 在尾部新增速度很快
• 在中間插入慢
成員函式
初始化
[cpp] view plaincopy
01.vector(); 初始化成空
02.vector(int n); 初始化成有n個元素
03.vector(int n, const T & val); 初始化成有n個元素, 每個元素的值都是val,型別是T
04.vector(iterator first, iterator last); 初始化為與別的容器上區間[first, last)一致的內容
舉例:
1.建立一個int型別的空的vector物件:
vector<int> intvec;
2.建立一個包含5個int型別資料的vector:
vector<int> intvec(5);
3.建立一個包含5個int型別資料的vector,並且都初始化為2:
vector
4.通過複製某vec容器來建立
vector
元素的訪問
intvec.at(index)
返回由index指定的位置上的元素
intvec[index]
返回由index指定的位置上的元素
舉例:
[cpp] view plaincopy
01.include <iostream>
02.#include <vector>
03.using namespace std;
04.int main()
05.{
06. vector<int> vec(10);
07. for (int i = 0;i != vec.size();i++)
08. {
09. vec.at(i) = i;
10. //vec[i] = i ;
11. }
12.
13. for (int i = 0;i != vec.size();i++)
14. {
15. cout << vec.at(i)<<endl;
16. //cout <<vec[i]<<endl;
17. }
18.
19.
20.
21.
22. return 0;
23.}
容器的大小
表示式
作用
intvec.capacity()
返回不重新分配空間可以插入到容器intvec中的元素的最大個數
intvec.empty()
容器intvec為空,返回true;否則,返回false
Intvec.size()
返回容器intvec中當前的個數
intvec.resize(num)
將元素個數改為num。如果size()增加,預設的建構函式負責建立這些新元素
intvec.resize(num, elem)
將元素個數改為num。如果size()增加,預設的建構函式將這些新元素初始化為elem
舉例:
[cpp] view plaincopy
01.#include <iostream>
02.#include <vector>
03.using namespace std;
04.int main()
05.{
06. vector<int> vec1;
07. cout << vec1.empty()<<endl; //返回1
08. cout << vec1.size()<<endl; //返回0
09.
10. vector<int> vec2(20);
11. cout << vec2.empty()<<endl; //返回0
12. cout << vec2.size()<<endl; //返回20
13.
14. vector<int> vec3(15,1);
15. cout << vec3.capacity()<<endl;//返回15
16. vec3.push_back(1);
17. cout << vec3.size()<<endl; //返回16
18. cout << vec3.capacity()<<endl;//返回30
19. //陣列不夠時,下次重新分配時會擴大為兩倍
20.
21. return 0;
22.}
容器的操作
語句
作用
intvec.clear()
從容器中刪除所有元素
intvec.erase(position)
刪除由position指定的位置上的元素
intvec.erase(beg,end)
刪除從beg到end-1之間的所有元素
intvec.insert(position, elem)
將elem的一個拷貝插入到由position指定的位置上,並返回新元素的位置
intvec.inser(position, n, elem)
將elem的n個拷貝插入到由 position指定的位置上
intvec.insert(position, beg, end)
將從beg到end-1之間的所有元素的拷貝插入到intvec中由position指定的位置上
intvec.push_back(elem)
將elem的一個拷貝插入到vector的末尾
intvec.pop_back()
刪除最後元素
intvec.front()
返回第一個元素的引用,不檢查容器是否為空
Intvec.back()
返回最後一個元素的引用,不檢查容器是否為空
[cpp] view plaincopy
01.#include <iostream>
02.#include <vector>
03.using namespace std;
04.int main()
05.{
06. vector<int> vec(10,1);
07. cout<<vec.empty()<<endl; //返回0
08. vec.clear();
09. cout<<vec.empty()<<endl; //返回1
10.
11. vector<int> vec1(1,1);
12. vec1.insert(vec1.begin()+1,2); //在該位置插入,把原來該位置以其以後的元素整體後移
13. for(int i = 0;i != vec1.size();i++)
14. cout<<vec1.at(i); //12
15. cout<<endl;
16.
17. vec1.push_back(3);
18. for(int i = 0;i != vec1.size();i++)
19. cout<<vec1.at(i); //123
20. cout<<endl;
21.
22. vec1.pop_back();
23. vec1.pop_back();
24. for(int i = 0;i != vec1.size();i++)
25. cout<<vec1.at(i); //1
26. cout<<endl;
27.
28. return 0;
29.}
[cpp] view plaincopy
01.#include <iostream>
02.#include <vector>
03.using namespace std;
04.int main()
05.{
06. vector<int> vec(10,1);
07. vec.push_back(2);//12
08.
09. cout<<vec.front()<<endl; //返回1
10. cout<<vec.back()<<endl; //返回2
11.
12. int &head = vec.front();
13. head++;
14. int &tail = vec.back();
15. tail--;
16. cout<<vec.front()<<endl; //返回2
17. cout<<vec.back()<<endl; //返回1
18.
19. return 0;
20.}
二維陣列
vector< vector<int> > v(3);
//v有3個元素,
//每個元素都是vector
[cpp] view plaincopy
01.#include <iostream>
02.#include <vector>
03.using namespace std;
04.int main() {
05. vector< vector<int> > v(3);
06. for(int i=0; i<v.size(); ++i)
07. for(int j=0; j<4; ++j)
08. v[i].push_back(j);
09. for(int i=0; i<v.size(); ++i){
10. for(int j=0; j<v[i].size(); ++j)
11. cout<<v[i][j]<<" ";
12. cout<<endl;
13. }
14. return 0;
15.}
輸出:
0 1 2 3
0 1 2 3
0 1 2 3