亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++中vector容器的常用操作方法實例總結

2020-01-26 14:36:20
字體:
來源:轉載
供稿:網友

1 獲得容器最后一個元素 

 ------ 使用 back或rbegin 取得

// back、rbegin 有常量和引用兩種形式     std::vector<int> myVector;     myVector.back()=3;        std::vector<int>::reverse_iterator tailIter;     tailIter=myVector.rbegin();     *tailIter=3 

2 刪除某元素
需要刪除某位置的元素,應使用iterator遍歷, 不應使用at(i) 方式遍歷,因為刪除元素時,是根據iterator位置進行刪除的。
刪除元素時,返回值為:位于刪除的元素之后的第一個的元素所在的位置

#include <vector> #include <iostream>  int main( ) {   using namespace std;     vector <int> v1;   vector <int>::iterator Iter;      v1.push_back( 10 );   v1.push_back( 20 );   v1.push_back( 30 );   v1.push_back( 40 );   v1.push_back( 50 );    cout << "v1 =" ;   for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ )    cout << " " << *Iter;   cout << endl;    v1.erase( v1.begin( ) );   cout << "v1 =";   for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ )    cout << " " << *Iter;   cout << endl;    v1.erase( v1.begin( ) + 1, v1.begin( ) + 3 );   cout << "v1 =";   for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ )    cout << " " << *Iter;   cout << endl; } 

輸出:

v1 = 10 20 30 40 50v1 = 20 30 40 50v1 = 20 50

3  兩vector 容易賦值時,不能通過=來賦值
而應使用遍歷 或assign函數的方式來賦值

//delNode.vectorNode 是與delPositionVector同類型容器 // vector 兩容器不能直接賦值 可通過 遍歷每個元素賦值,也可使用 assign賦值  VectorNode delNode;  delNode.numberOfFenkuai=nSelect; Node nodeTemp; 

錯誤賦值方式:

// 這是錯誤的賦值方式   delNode.vectorNode=delPositionVector ; 

正確賦值方式一: 遍歷

for (int i=0;i<delPositionVector.size();i++) {   nodeTemp=delPositionVector.at(i);   delNode.vectorNode.push_back(nodeTemp); } 

正確賦值方式二: assign函數

delNode.vectorNode.assign(delPositionVector.begin(),delPositionVector.end()); 

4  在指定的iterator位置 插入容器元素
插入某元素時,返回值為插入的那個元素所在的位置,原先處于此位置的元素將被順次后移

iterator insert(  iterator _Where,  const Type& _Val);void insert(  iterator _Where,  size_type _Count,  const Type& _Val);template<class InputIterator>   void insert(   iterator _Where,   InputIterator _First,   InputIterator _Last  );  

5 更新容器中的某個元素
辦法之一:  先搜索到這個元素位置, 在此位置添加更新的元素,刪除原先的元素
                       或搜索到此元素,刪除此元素,在此元素位置上添加新元素
應用例子:

delNode.vectorNode.assign(delPositionVector.begin(),delPositionVector.end()); BOOL bInsert=FALSE; std::vector <VectorNode>::iterator iter; for (iter=g_DelVector.begin();iter!=g_DelVector.end();iter++) {   if ((*iter).numberOfFenkuai==nSelect)   {     bInsert=TRUE;     //g_DelVector.erase(iter);     //g_DelVector.insert(iter,delNode);     iter=g_DelVector.insert(iter,delNode);     iter=g_DelVector.erase(iter+1);     iter--;     break;   } }   if (!bInsert) {   g_DelVector.push_back(delNode); } 

 
6 push_back或pop某元素后,迭代器會失效  需要重新獲得

STL中的vector不是關聯性容器,當插入新的元素后,原來取得的迭代器就會失效。

std::vector<int> vNum; vNum.push_back(1); vNum.push_back(3); vNum.push_back(5); std::vector<int>::iterator pIt = vNum.begin(); std::cout << "Before insert a new number: " << *pIt << std::endl; vNum.push_back(7); std::cout << "After insert a new number: " << *pIt << std::endl;  // Oh! No! 

注意最后一句,運行到最后一句時就會發生崩潰,迭代器訪問錯誤。插入元素后,要重新取得迭代器。

而對于map這樣的關聯性容器,插入新元素后,原來的迭代器仍然會有效。
例子如下:

std::map<int, int> mNum; mNum[0] = 0; mNum[1] = 1; mNum[2] = 2; std::map<int, int>::iterator pIt = mNum.begin(); std::cout << "Before insert a new number: (" << pIt->first << ", " << pIt->second << ")" << std::endl; mNum[3] = 3; std::cout << "After insert a new number: (" << pIt->first << ", " << pIt->second << ")" << std::endl; // OK! 

7 合并兩個順序容器

std::vector<line>::iterator i1 = v1.begin(), i2 = v2.begin(); while(i1 != v1.end() && i2 != v2.end()) {   if(i1->index == i2->index)   {     line t = { i1->index, i1->value1, i2->value2 }     v3.push_back(t);     ++i1;     ++i2;   }   else if(i1->index > i2->index)   {     i2->value1 = 0;     v3.push_back(*i2);     ++i2;   }   else   {     i1->value2 = 0;     v3.push_back(*i1);     ++i1;   } }  while(i1 != v1.end())   v3.push_back(*(i1++));  while(i2 != v2.end())   v3.push_back(*(i2++)); 

9 排序

// alg_sort.cpp // compile with: /EHsc #include <vector> #include <algorithm> #include <functional>   // For greater<int>( ) #include <iostream>  // Return whether first element is greater than the second bool UDgreater ( int elem1, int elem2 ) {   return elem1 > elem2; }  int main( ) {   using namespace std;   vector <int> v1;   vector <int>::iterator Iter1;    int i;   for ( i = 0 ; i <= 5 ; i++ )   {    v1.push_back( 2 * i );   }    int ii;   for ( ii = 0 ; ii <= 5 ; ii++ )   {    v1.push_back( 2 * ii + 1 );   }    cout << "Original vector v1 = ( " ;   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )    cout << *Iter1 << " ";   cout << ")" << endl;    sort( v1.begin( ), v1.end( ) );   cout << "Sorted vector v1 = ( " ;   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )    cout << *Iter1 << " ";   cout << ")" << endl;    // To sort in descending order. specify binary predicate   sort( v1.begin( ), v1.end( ), greater<int>( ) );   cout << "Resorted (greater) vector v1 = ( " ;   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )    cout << *Iter1 << " ";   cout << ")" << endl;    // A user-defined (UD) binary predicate can also be used   sort( v1.begin( ), v1.end( ), UDgreater );   cout << "Resorted (UDgreater) vector v1 = ( " ;   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )    cout << *Iter1 << " ";   cout << ")" << endl; } 
Original vector v1 = ( 0 2 4 6 8 10 1 3 5 7 9 11 ) Sorted vector v1 = ( 0 1 2 3 4 5 6 7 8 9 10 11 ) Resorted (greater) vector v1 = ( 11 10 9 8 7 6 5 4 3 2 1 0 ) Resorted (UDgreater) vector v1 = ( 11 10 9 8 7 6 5 4 3 2 1 0 ) 

10  清空所有元素

m_itemVector.clear(); 

11 遍歷

vector<ITEM_CHECK>::iterator iter=m_itemVector.begin(); for(i=0;iter!=m_itemVector.end();iter++,i++) {   if(iter->flag==-1)   {     break;   }   iter->flag=1; } vector<ITEM_CHECK>::iterator iter=m_itemVector.begin(); for(i=0;iter!=m_itemVector.end();iter++,i++) //先全部取消 {   iter->flag=0; } 

12 刪除符合條件的項

int CurrentCount=(int)m_itemVector.size(); for(int i=0;i<CurrentCount;i++) {   if(m_itemVector.at(i).flag==1)   {     m_itemVector.erase(m_itemVector.begin()+i);     DeleteItem(i);     this->Invalidate();       CurrentCount--;     i--;                        //刪除第i位置后,需要重新判斷第i位置是否符合條件,因此需要i--。   } } 

13 正序遍歷 然后反序遍歷

vector<ITEM_CHECK>::iterator iter=m_itemVector.begin(); for(i=0;iter!=m_itemVector.end();iter++,i++) //先全部取消 {   iter->flag=0; }  for (;i>0;)            //從后往前設置 iter 退到Begin() 再減的話 就會出現問題 {    iter--; //結束時,正好退到Begin()   i--;   iter->flag=1; } 

14 在VECTOR中查找

#include<vector> #include<algorithm> //在VECTOR中查找 using namespace std; vector<int> L; L.push_back( 1 ); L.push_back( 2 ); L.push_back( 3 ); L.push_back( 4 ); L.push_back( 5 ); vector<int>::iterator result = find( L.begin( ), L.end( ), 3 ); //查找3 if ( result == L.end( ) ) //沒找到   cout << "No" << endl; else //找到   cout << "Yes" << endl; 

    
  

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品一区电影| 国产xxx69麻豆国语对白| 欧洲成人性视频| 亚洲在线免费看| 久久久精品影院| 色综合天天综合网国产成人网| 美女视频黄免费的亚洲男人天堂| 欧美激情性做爰免费视频| 91精品国产电影| 久久久av亚洲男天堂| 亚洲第一网站男人都懂| 欧美黄色免费网站| 伊人亚洲福利一区二区三区| 久久免费视频网| 91伊人影院在线播放| 久久精品国产一区二区电影| 国产精品成熟老女人| 亚洲成人久久网| 日韩欧美精品网址| 中文字幕亚洲天堂| 欧美在线www| 高清日韩电视剧大全免费播放在线观看| 日韩黄色高清视频| 亚洲自拍欧美色图| 亚洲片国产一区一级在线观看| 亚洲男人天堂视频| 一区二区欧美日韩视频| 中文字幕av一区| 久久免费视频网站| 国产小视频国产精品| 亚洲欧美日韩高清| 波霸ol色综合久久| 国产精品久久久久久亚洲影视| 日韩激情av在线播放| 欧美成人四级hd版| 国产精品青青在线观看爽香蕉| 国产极品jizzhd欧美| 日韩**中文字幕毛片| 91福利视频在线观看| 欧美成人免费小视频| 色黄久久久久久| 日韩av电影在线免费播放| 亚洲成色999久久网站| 色www亚洲国产张柏芝| 久久亚洲精品中文字幕冲田杏梨| 中文字幕精品—区二区| 亚洲免费av片| 欧美丰满少妇xxxx| 日韩电影大片中文字幕| 在线观看成人黄色| 日本成人激情视频| 91亚洲精品久久久| 亚洲第一色中文字幕| 亚洲男人天堂网| 欧美视频在线观看免费网址| 久久久久久成人| 国内精品久久久| 国产精品久久久久久久久久东京| 欧美日韩国产在线播放| 国产69精品久久久久99| 伊人久久大香线蕉av一区二区| 欧美成人黑人xx视频免费观看| 亚洲激情在线观看| 国产欧美日韩综合精品| 亚洲美女精品久久| 精品国产精品自拍| 久久精品视频在线观看| 亚洲精品mp4| 国产精品爱啪在线线免费观看| 91九色国产视频| 亚洲美女免费精品视频在线观看| 成人黄色短视频在线观看| 川上优av一区二区线观看| 92国产精品视频| 日韩中文在线观看| 欧美中文字幕精品| 国产情人节一区| 国产免费成人av| 日本亚洲欧洲色α| 欧美成人合集magnet| 欧美成人免费全部| 中文字幕久久久av一区| 精品久久香蕉国产线看观看亚洲| 欧美日韩亚洲精品一区二区三区| 国产精品第2页| 国产成人av网址| 在线观看精品国产视频| 海角国产乱辈乱精品视频| 亚洲色图偷窥自拍| 欧美福利在线观看| 精品国偷自产在线视频| 日韩欧美在线视频日韩欧美在线视频| 国产日韩欧美电影在线观看| 国产日韩欧美另类| 欧美国产日韩一区二区三区| 欧美激情亚洲一区| 日韩亚洲精品视频| 日本免费久久高清视频| 亚洲自拍偷拍网址| 亚洲free嫩bbb| 国外视频精品毛片| 久久久久成人精品| 777午夜精品福利在线观看| 成人乱人伦精品视频在线观看| 久久综合色88| 久久久久久久久综合| 亚洲欧美在线看| 日韩欧美国产激情| 中文精品99久久国产香蕉| 久久这里有精品视频| 亚洲第一福利视频| 日韩精品中文字| 日韩欧美a级成人黄色| 国产日韩欧美自拍| 久久久精品999| 欧美性xxxx| 色偷偷综合社区| 精品久久久久久久久久国产| 久久久久久久久久久人体| 欧美性在线观看| 亚洲日本欧美中文幕| 亚洲国产精品小视频| 欧美视频在线观看免费| 亚洲国产97在线精品一区| 日韩国产高清污视频在线观看| 国产精品亚洲视频在线观看| 欧美成人午夜免费视在线看片| 久久亚洲精品网站| 国产精品免费视频xxxx| 欧美xxxwww| 国产婷婷色综合av蜜臀av| 欧美富婆性猛交| 亚洲xxxx视频| 欧美成人免费网| 国产精品色婷婷视频| 国产视频丨精品|在线观看| 成人黄色av免费在线观看| 亚洲国产精品专区久久| 久久久久日韩精品久久久男男| 欧美性猛交xxxx乱大交蜜桃| 久久天天躁狠狠躁老女人| 狠狠色噜噜狠狠狠狠97| 国产精品你懂得| 久久国产精品久久精品| 亚洲欧美日韩区| 在线观看国产成人av片| 97在线看免费观看视频在线观看| 精品国内产的精品视频在线观看| 国产亚洲美女久久| 亚洲91精品在线观看| 性色av一区二区三区红粉影视| 5566日本婷婷色中文字幕97| 国产日产亚洲精品| 2019中文字幕免费视频| 一个人看的www欧美| 欧美性猛交xxxx乱大交3| 91av免费观看91av精品在线| 久久精品久久久久| 欧美最顶级的aⅴ艳星| 欧美日韩免费一区| 久久国产精品亚洲| 日韩视频亚洲视频| 中文字幕欧美精品在线| 久久国产精品久久久久久|