c++ vector学习
生活随笔
收集整理的這篇文章主要介紹了
c++ vector学习
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考資料:
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 920.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 723.emplace_back (???)
24.pop_back (移除容器最后一個元素 )
//vec: 1 3 5 7 vec.pop_back(); //vec: 1 3 525.resize (改變容器存儲元素個數)
如果num小于容器當前元素個數則只保留容器前num個
如果num大于容器當前元素個數則往容器添加元素直至num個
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總結
以上是生活随笔為你收集整理的c++ vector学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给猫驱虫多少钱啊?
- 下一篇: 极米A3怎么查询是否翻新机