Vector容器主要函式說明
C++ STL標準模板庫
vector容器
vector容器相當於單端陣列,但與普通陣列的區別為:
普通陣列是靜態空間,vector容器是可擴充套件的。擴充時不是在原空間後繼續開拓空間,而是重新找一塊更大的空間,將資料拷貝到新空間中,並釋放原空間。
容器示意圖:
特點:
1.前端封閉,只能在後端插入push_back() 和彈出pop_back(), front()指向第一個資料,back()指最後一個資料;
2.可以利用迭代器對容器中內容進行遍歷,其中v.begin()指向第一個元素,v.end()指向最後一個元素的下一個位置,v.rbegin()指向最後一個元素,v.rend()指向第一個元素的前一個位置。
相關的函式及操作
遍歷列印輸出
void printVector(vector<int>& v) {
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
cout << endl;
}
int main() {
vector<int> v;
for(int i = 0; i < 20; i++){
v.push_back(i);
}
//列印v
printVector(v);
}
1. 建構函式
(1) 功能描述:建立vector容器
(2) 函式原型:
vector<T> v;
; //採用模板實現類實現,預設建構函式vector(v.begin, v.end());
//將v[begin(), end())區間中的元素拷貝給本身。vector(n, elem);
; //建構函式將n個elem拷貝給本身。vector(const vector &vec);
//拷貝建構函式。
2. 賦值
(1) 功能描述:給vector容器進行賦值
(2) 函式原型:
-
vector& operator=(const vector &vec);
//過載等號操作符 -
assign(beg, end);
//將[beg, end)區間中的資料拷貝賦值給本身。 -
assign(n, elem);
; //將n個elem拷貝賦值給本身。
3. 容量和大小
(1) 功能描述:對vector容器進行容量和大小操作
(2) 函式原型:
empty() ;
//判斷容器是否為空size();
//獲取容器的大小capacity();
//獲取容器的容量resize( num );
//重新指定容器長度為num(int型別),若容器變長,則以預設值0填充新位置;若容器變短,則末尾超出容器長度的元素被刪除。resize(num, elem)
//與上同,但預設的填充元素變為elem;
4. 插入和刪除
(1) 功能描述:對vector容器進行插入和刪除操作
(2) 函式原型:
push_back(elem);
//在尾部插入資料elempop_back();
//刪除最後一個元素insert(const_iterator pos, elem)
//在迭代器指向的位置插入元素eleminsert(const_iterator pos, int count, elem)
//在迭代器指向的位置處插入count 個 elemerase(const_iterator pos);
//刪除迭代器指向的元素
5. 資料存取
(1) 功能描述:訪問vector容器中的元素
(2) 函式原型:
at(int index)
//返回索引值 index 所指的元素operator[]
//返回索引值 index 所指的元素front()
//返回容器中第一個元素back()
//返回容器中最後一個元素
6. 互換容器
(1) 功能描述:將兩個vector容器中資料進行交換
(2) 函式原型:
swap()
案例演示:
//建立兩個容器
vector<int> v1;
vector<int> v2;
//向v1,v2中加入資料
v1.push_back(1);
v2.push_back(2);
.....
//將v1和v2交換
v1.swap(v2);
交換容器的用途:
縮小容器中容量,避免空間浪費,案例程式碼如下:
vector<int> v;
for (int i = 0; i < 100000; i++) {
v.push_back(i);
}
cout << "v的容量為:" << v.capacity() << endl; //100000+
cout << "v的大小為:" << v.size() << endl; //100000
//重新給容器設定大小
v.resize(3);
//此時容器的容量仍為為數值,會造成空間浪費
cout << "v的容量為:" << v.capacity() << endl; //100000+
cout << "v的大小為:" << v.size() << endl; //3
//收縮記憶體
vector<int>(v).swap(v);
/* 其中,vector<int>(v)為匿名物件
.swap(v)為容量交換(可視為指標交換)
*/
cout << "v的容量為:" << v.capacity() << endl; //3
cout << "v的大小為:" << v.size() << endl; //3
7. 預留空間
(1) 功能描述:減少vector在動態擴充套件容量時的擴充套件次數
(2) 函式原型:
reserve(int len);
//預留len個元素長度,預留位置不可初始化,元素不可訪問
示例:
#include <vector>
void test01()
{
vector<int> v;
//預留空間
v.reserve(100000);
//記錄開闢記憶體的次數
int num = 0;
//記錄開闢空間的初始位置
int* p = NULL;
for (int i = 0; i < 100000; i++) {
v.push_back(i);
/* 若此時指標p指向的位置不是容器的初始位置
說明已經開闢了新的空間
因為p->原容器首位,後來重新開闢空間
p->原位置,但容器首位的地址改變了!
*/
if (p != &v[0]) {
p = &v[0];
num++;
}
}
cout << "num:" << num << endl;
}
int main() {
test01();
system("pause");
return 0;
}
參考博文:
- Vector容器
相關文章
- python3:urllib.request 的主要函式說明Python函式
- C++筆記— 排序函式sort() 和vector容器C++筆記排序函式
- Python 閉包函式說明Python函式
- PHP 風險函式說明PHP函式
- scapy函式 IP() 使用說明函式
- Java @FunctionInterface函式式介面使用說明JavaFunction函式
- python中encode和decode函式說明Python函式
- apolloxlua標準庫require函式說明UI函式
- jQuery - 函式 $.ajaxSetup 的說明和使用jQuery函式
- Vector容器鑲套容器
- STL容器---Vector
- 【彙總】EMQX 函式API、安裝與使用說明MQ函式API
- tf.gfile函式和gfile.MakeDirs(FLAGS.train_dir)函式的詳細說明函式AI
- 3568F-Docker容器部署方法說明Docker
- MySQL EXPLAIN命令的主要專案說明MySqlAI
- C++的vector容器C++
- 初探STL容器之Vector
- c++ vector容器、字串C++字串
- C++之vector容器C++
- Vector人工智慧情感機器人SDK釋出和說明(ROS2GO 2.0 + Vector 2.0)人工智慧機器人ROSGo
- 舉例說明js立即執行函式的寫法有哪些?JS函式
- 【cartographer_ros】七: 主要配置引數說明ROS
- css樣式說明介紹CSS
- C++ 容器vector的使用C++
- STL原始碼剖析——vector容器原始碼
- 帝國CMS動態頁分頁函式page1解析說明函式
- 容器技術之Docker常用命令說明Docker
- C++ vector容器的swap方法(容器互換)C++
- 探索.NET平臺中的SIMD內在函式Vector函式
- set容器幾個關鍵函式函式
- STL容器的各個函式方法函式
- 『無為則無心』Python日誌 — 69、補充:logging.basicConfig()函式說明Python函式
- 說說 Spring 支援的 AspectJ 切點函式Spring函式
- 說說在 Python 中如何測試函式Python函式
- 胡說-JavaScript函式型別JavaScript函式型別
- MySQL數學函式簡明總結MySql函式
- 說明
- 說說在 Python 中如何向函式傳參Python函式