參考資料:
cppreference.com
本文代碼:
本文源碼
目錄
- 隱式成員函數
- 1.operator= (賦值給容器)
- 2.assign (將值賦給容器)
- 元素訪問
- 3.at (訪問指定元素,進行下標檢查)
- 4.operator[] (訪問指定元素,可能出現訪問越界)
- 5.front (訪問第一個元素)
- 6.back (訪問最后一個元素)
- 7.data (返回數組第一個元素的地址指針)
- 迭代器
- 8.begin/cbegin (返回指向容器第一個元素的迭代器 /常量迭代器)
- 9.end/cend(返回指向容器尾端的迭代器/常量迭代器)
- 10.rbegin/rcbegin(返回指向容器最后一個元素的迭代器/常量迭代器)
- 11.cend/crend (返回指向容器前端的逆向迭代器/常量迭代器)
- 容量
- 12.empty (判斷容器是否為空)
- 13.size (返回容器當前元素個數)
- 14.max_size (返回容器可容納的最大元素個數)
- 15.reserve (增加容器容納空間)
- 16.capacity (返回容器當前可容納的元素個數)
- 17.shrink_to_fit (回收容器未使用的空間)
- 修改器
- 18.clear (清除容器中的所有元素)
- 19.insert (在容器的指定位置插入指定的值)
- 20.emplace (???)
- 21.erase (移除容器內指定位置的值)
- 22.push_back (從容器的尾端添加元素)
- 23.emplace_back (???)
- 24.pop_back (移除容器最后一個元素 )
- 25.resize (改變容器存儲元素個數)
- 26.swap (交換兩個容器的內容)
隱式成員函數
1.operator= (賦值給容器)
可以用 = 來進行 vector 的賦值,賦值后他們是兩個不同的東西,即使修改了vec,也不會修改對tempVec,是深拷貝:
vector<int> vec;
vector<int> tempVec;
tempVec = vec;
2.assign (將值賦給容器)
void assign( size_type count, const T& value );
簡單來說就是將vector的內容轉成count個value
tempVec.assign(10,6)
/*
輸出:
6 6 6 6 6 6 6 6 6 6
*/
元素訪問
3.at (訪問指定元素,進行下標檢查)
當site超出范圍的時候會跑出 std::out_of_range 類型異常
vec.at(site)
4.operator[] (訪問指定元素,可能出現訪問越界)
vec[site]
5.front (訪問第一個元素)
vec.front()
6.back (訪問最后一個元素)
vec.bakc()
7.data (返回數組第一個元素的地址指針)
返回的是指向第一個元素的指針
vec.data(site)
迭代器
最簡單地理解就是操作容器的指針
8.begin/cbegin (返回指向容器第一個元素的迭代器 /常量迭代器)
返回指向第一個元素的迭代器/常量迭代器(指向的內容不能改變,指向誰可以改)
std::vector<int>::iterator itr = vec.begin();
//指向第二個元素
std::cout<<*(++itr)<<std::endl; std::vector<int>::const_iterator cItr = vec.cbegin();
//指向第一個元素
std::cout<<*cItr<<std::endl;//可以這樣
cItr = itr;
//不可以這樣:*(++cItr)
9.end/cend(返回指向容器尾端的迭代器/常量迭代器)
返回指向最后一個元素的后一個位置的迭代器(最后一個元素的身后),和begin類似,至于cend除了作為vector的結束之外還有什么用就暫時還沒想到。
std::vector<int>::iterator itr = vec.end();
//倒數第一個元素
std::cout << *(--itr) << std::endl;std::vector<int>::const_iterator cItr = vec.cend();
//順序打印vec
for(itr = vec.beign();i!=cItr;++i){std::cout<<*i<<" ";
}
10.rbegin/rcbegin(返回指向容器最后一個元素的迭代器/常量迭代器)
這是一個逆向迭代器,使用 ++ 的時候不是往后移動,而是往前移動,使用 – 才能往后移動。
std::vector<int>::reverse_iterator itr = vec.rbegin();
//倒數第二個元素
std::cout << *(++itr) << std::endl;std::vector<int>::const_reverse_iterator cItr = vec.crbegin();
//最后一個元素
std::cout << *cItr << std::endl;
11.cend/crend (返回指向容器前端的逆向迭代器/常量迭代器)
和end類似,end指向容器最后一個元素的后一個位置,rend指向容器第一個元素的前一個位置,所以我也不知道這個crend的其他作用
std::vector<int>::reverse_iterator itr = vec.rend();
//第一個元素是:
std::cout << *(--itr) << std::endl;std::vector<int>::const_reverse_iterator cItr = vec.crend();
//逆序打印vec:
for (itr = vec.rbegin(); itr != cItr; ++itr) {std::cout << *itr << " ";
}
容量
12.empty (判斷容器是否為空)
為空時返回true,非空時返回false
bool empty()
if (vec.empty()) {std::cout << "vec為空!\n";}else {std::cout << "vec不為空!\n";}
13.size (返回容器當前元素個數)
vec.size();
14.max_size (返回容器可容納的最大元素個數)
vec.max_size();
15.reserve (增加容器容納空間)
將vec的容量增加到大于或等于count,如果count小于當前的已分配的控件大小就不做任何事。
vec.reserve(count);
16.capacity (返回容器當前可容納的元素個數)
vec.capacity();
17.shrink_to_fit (回收容器未使用的空間)
//假設輸出10,vec.size()也是返回10
std::cout << vec.capacity() << std::endl;
//增加容量
vec.reserve(50);
//此時輸出50
std::cout << vec.capacity() << std::endl;
//回收空間
vec.shrink_to_fit();
//輸出10
std::cout << vec.capacity() << std::endl;
修改器
18.clear (清除容器中的所有元素)
// 假設輸出10
std::cout << vec.size() << std::endl;
vec.clear();
// 輸出0
std::cout << vec.size() << std::endl;
19.insert (在容器的指定位置插入指定的值)
//插入之前:1 3 5 7 9
//在第3個位置插入4:
tempVec.insert(tempVec.begin() + 3, 4);
//1 3 5 4 7 9//在第3個位置插入4個5:
tempVec.insert(tempVec.begin() + 3, 4, 5 );
//1 3 5 5 5 5 5 4 7 9
20.emplace (???)
21.erase (移除容器內指定位置的值)
//刪除第3個位置的值
tempVec.erase(tempVec.begin()+3);//刪除容器第0到第5個元素(不包括第5個即[0,5))
tempVec.erase(tempVec.begin(), tempVec.begin() + 5);
22.push_back (從容器的尾端添加元素)
//vec: 1 3 5
vec.push_back(7)
//vec: 1 3 5 7
23.emplace_back (???)
24.pop_back (移除容器最后一個元素 )
//vec: 1 3 5 7
vec.pop_back();
//vec: 1 3 5
25.resize (改變容器存儲元素個數)
如果num小于容器當前元素個數則只保留容器前num個
如果num大于容器當前元素個數則往容器添加元素直至num個
//tempVec.size() 為 20
tempVec.resize(10)
//只剩下前10個元素了//添加到15個元素,用默認值填充
tempVec.resize(15);
//現在tempVec的元素個數為15了,而且后5個是0//添加到20個元素,用指定值填充
tempVec.resize(20,999);
//現在tempVec的元素個數為20了,而且后5個是999
26.swap (交換兩個容器的內容)
//交換前:
//vec:1 3 5 7
//tempVec:2 4 6 8
vec.swap(tempVec)
//交換后:
//vec:2 4 6 8
//tempVec: 1 3 5 7