C++总结篇(5)vector
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                C++总结篇(5)vector
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                vector是表示可變大小數(shù)組的序列容器。就像數(shù)組一樣,vector也采用的連續(xù)存儲空間來存儲元素。也就是意味著可以采用下標(biāo)對vector的元素 進(jìn)行訪問,和數(shù)組一樣高效。但是又不像數(shù)組,它的大小是可以動態(tài)改變的,而且它的大小會被容器自動處理。
Vector迭代器:
如例:
void test1(vector<int> &vec) {vector<int>::iterator it = vec.begin();while (it != vec.end()){cout << *it << endl;it++;} }void test2(vector<int> &vec) {vector<int>::reverse_iterator rit = vec.rbegin();while (rit != vec.rend()){cout << *rit << endl;rit++;} }int main() {vector<int>vec(4,10);vec.push_back(1);vec.push_back(2);vec.push_back(3);vec.push_back(4);test1(vec);test2(vec);system("pause");return 0; }Vector空間增長
size 獲取數(shù)據(jù)個(gè)數(shù) capacity 獲取容量大小 empty 判斷是否為空 resize 改變vector的size reserve 改變vector放入capacity如例:
void test(vector<int> &vec) {cout << vec.size() << endl;//獲取有效數(shù)據(jù)的大小cout << vec.capacity() << endl;//獲取容量的大小cout << vec.empty() << endl;//檢查空間是否為空vec.resize(5);//改變有效數(shù)據(jù)的大小為5vec.reserve(15);//改變空間的大小為15cout << vec.size() << endl;cout << vec.capacity() << endl;//打印數(shù)據(jù)vector<int>::iterator it = vec.begin();while (it != vec.end()){cout << *it << endl;it++;}vec.clear();//清空cout << vec.size() << endl;cout << vec.capacity() << endl;cout << vec.empty() << endl; }Vector的增刪查改
push_back 尾插 pop_back 尾刪 insert 在指定位置插入val erase 刪除指定位置的數(shù)據(jù) swap 交換兩個(gè)vector的數(shù)據(jù)空間 operator[] 像數(shù)組一樣訪問如例:
vector<int>::iterator find(vector<int>::iterator begin, vector<int>::iterator end,int n) {for (; begin != end&&n; begin++, n--);return begin; }void test(vector<int> &vec) {vec.push_back(5);//尾插一個(gè)數(shù)據(jù)5vec.pop_back();//從尾刪除一個(gè)數(shù)據(jù)vector<int>::iterator pos = find(vec.begin(), vec.end(), 2);//查找第2個(gè)位置數(shù)據(jù)的迭代器并返回給posvec.insert(pos, 12);//在pos位置插入數(shù)據(jù)12vec.erase(pos);//刪除pos位置的數(shù)據(jù)//新建一個(gè)vector容器v并插入數(shù)據(jù)vector<int> v;v.push_back(5);v.push_back(6);v.push_back(7);v.push_back(8);swap(v, vec);//交換v與vec的數(shù)據(jù)cout << vec.operator[](1)<<endl;//打印vec中位置為1處的數(shù)據(jù) }迭代器失效
插入數(shù)據(jù)迭代器失效
 當(dāng)在pos位置插入數(shù)據(jù)操作時(shí),insert會使vector擴(kuò)容,一旦擴(kuò)容,pos指向的位置會被釋放,故而無法對其訪問。
 Vector擴(kuò)容并不是在原有的基礎(chǔ)上增大空間,而是重新開辟一個(gè)合適大小的空間,在將原來vector中的數(shù)據(jù)移到新開辟的vector中,再將原來vector的釋放掉。
如例:
vector<int>::iterator find(vector<int>::iterator begin, vector<int>::iterator end, int n) {for (; begin != end&&n; begin++, n--);return begin; }void test(vector<int> &vec) {vec.push_back(1);vec.push_back(2);vec.push_back(3);vec.push_back(4);vec.push_back(5);cout << vec.size() << endl;cout << vec.capacity() << endl;vector<int>::iterator pos = find(vec.begin(), vec.end(), 3);vec.insert(pos, 11);cout << *pos << endl;//出錯(cuò) }刪除指定位置數(shù)據(jù)迭代器失效
將pos位置的數(shù)據(jù)刪除掉,即將該數(shù)據(jù)存放的空間時(shí)放掉,在對該位置進(jìn)訪問即為非法訪問。
如例:
vector<int>::iterator find(vector<int>::iterator begin, vector<int>::iterator end, int n) {for (; begin != end&&n; begin++, n--);return begin; }void test(vector<int> &vec) {vec.push_back(1);vec.push_back(2);vec.push_back(3);vec.push_back(4);vec.push_back(5);cout << vec.size() << endl;cout << vec.capacity() << endl;vector<int>::iterator pos = find(vec.begin(), vec.end(), 3);vec.erase(pos);cout << *pos << endl;//出錯(cuò) } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的C++总结篇(5)vector的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 受限玻尔兹曼机(RBM)与python在
- 下一篇: python 多线程 popen pin
