C++ vector用法解析 也可類推STL,string.

一個特別好用的網站:http://www.cplusplus.com/reference/deque/deque/

C++ vector用法解析 也可類推STL,string。

好像大部分函數都是通用的,還沒發現不合適的,如有錯誤,望指出。

一維初始化:vector<type> vec = {};  vector<type> vec2(vec);

二維初始化:vector<vector<type>> vvec = {{}}; vector<vector<type>> vvec2(vvec);

一、容器特性

1.順序序列

順序容器中的元素按照嚴格的線性順序排序。可以通過元素在序列中的位置訪問對應的元素。

2.動態數組

支持對序列中的任意元素進行快速直接訪問,甚至可以通過指針算述進行該操作。操供了在序列末尾相對快速地添加/刪除元素的操作。

3.能夠感知內存分配器的(Allocator-aware)

容器使用一個內存分配器對象來動態處理它的存儲需求。

二、基本函數實現

1.構造函數

  • vector():創建一個空vector
  • vector(int nSize):創建一個vector,元素個數爲nSize
  • vector(int nSize,const t& t):創建一個vector,元素個數爲nSize,且值均爲t
  • vector(const vector&):複製構造函數
  • vector(begin,end):複製[begin,end)區間內另一個數組的元素到vector中

2.增加函數

  • void push_back(const T& x):向量尾部增加一個元素X
  • iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一個元素x
  • iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n個相同的元素x 
  • iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一個相同類型向量的[first,last)間的數據

3.刪除函數

  • iterator erase(iterator it):刪除向量中迭代器指向元素
  • iterator erase(iterator first,iterator last):刪除向量中[first,last)中元素
  • void pop_back():刪除向量中最後一個元素
  • void clear():清空向量中所有元素

4.遍歷函數

  • reference at(int pos):返回pos位置元素的引用 一般都是【pos】
  • reference front():返回首元素的引用
  • reference back():返回尾元素的引用
  • iterator begin():返回向量頭指針,指向第一個元素
  • iterator end():返回向量尾指針,指向向量最後一個元素的下一個位置
  • reverse_iterator rbegin():反向迭代器,指向最後一個元素【一般用於反轉】
  • reverse_iterator rend():反向迭代器,指向第一個元素之前的位置
	vector<int>::reverse_iterator ti;//rbegin,rend使用需要先聲明反向迭代器
	for (ti = v.rbegin(); ti != v.rend();ti++)
	{
		cout << *ti << " ";
	}

 

5.判斷函數

  • bool empty() const:判斷向量是否爲空,若爲空,則向量中無元素 判斷有無不能直接像py一樣bool(vector)

6.大小函數

  • int size() const:返回向量中元素的個數
  • int capacity() const:返回當前向量所能容納的最大元素值
  • int max_size() const:返回最大可允許的vector元素數量值
  • resize(N):用於刪減向量末尾不需要的原始很方便

7.其他函數

  • void swap(vector&):交換兩個同類型向量的數據  這個C++自帶,通用
  • void assign(int n,const T& x):設置向量中第n個元素的值爲x  vec[n] = x;
  • void assign(const_iterator first,const_iterator last):向量中[first,last)中元素設置成當前向量元素

八.關於迭代器,insert返回迭代器所在位置,rbegin使用等

平時用的少但需要注意的點匯合

#include<vector>  
#include<iostream>
#include<iterator>
#include<algorithm>
using namespace std;

int main()
{
	vector<int> v(3);
	v[0] = 2; //v[0]是第0個元素 
	v[1] = 7;
	v[2] = 9;
	vector<int>::iterator p;
	p = v.insert(v.begin(), 8);//在最前面插入新元素。
	cout << *p << endl;//輸出8,當前迭代器指向位置 8
	v.insert(v.begin() + 2, 1);//在迭代器中第二個元素前插入新元素
	p  = v.insert(v.end(), 3);//在向量末尾追加新元素。  
	cout << *p << endl;//輸出3,當前迭代器指向位置 3
	v.insert(v.end(), 4, 1);//在尾部插入4個1

	int a[] = { 1,2,3,4 };
	v.insert(v.end(), a[1], a[3]);//在尾部插入a[1]個a[3]

	vector<int>::iterator it;
	for (it = v.begin(); it != v.end();it++)
	{
		cout << *it << " ";
	}
	cout << endl;
	vector<int>::reverse_iterator ti;//rbegin,rend使用需要先聲明反向迭代器
	for (ti = v.rbegin(); ti != v.rend();ti++)
	{
		cout << *ti << " ";
	}
	cout << endl;
	reverse(v.begin(), v.end());
	for (it = v.begin(); it != v.end();it++)
	{
		cout << *it << " ";
	}
	cout << endl;
	system("pause");
	return 0;
}

列表:

1.push_back 在數組的最後添加一個數據

2.pop_back 去掉數組的最後一個數據

3.at 得到編號位置的數據

4.begin 得到數組頭的指針

5.end 得到數組的最後一個單元+1的指針

6.front 得到數組頭的引用

7.back 得到數組的最後一個單元的引用

8.max_size 得到vector最大可以是多大

9.capacity 當前vector分配的大小

10.size 當前使用數據的大小

11.resize 改變當前使用數據的大小,如果它比當前使用的大,填充默認值

12.reserve 改變當前vecotr所分配空間的大小

13.erase 刪除指針指向的數據項

14.clear 清空當前的vector

15.rbegin 將vector反轉後的開始指針返回(其實就是原來的end-1)

16.rend 將vector反轉構的結束指針返回(其實就是原來的begin-1)

17.empty 判斷vector是否爲空

18.swap 與另一個vector交換數據

 

 參考:

https://www.runoob.com/w3cnote/cpp-vector-container-analysis.html

https://blog.csdn.net/u010002184/article/details/77676638

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章