日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

vector插入/删除元素

發(fā)布時(shí)間:2024/4/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vector插入/删除元素 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

插入操作:

理論知識(shí)

2?vector.insert(pos,elem); ??//在pos位置插入一個(gè)elem元素的拷貝,返回新數(shù)據(jù)的位置。

2?vector.insert(pos,n,elem); ??//在pos位置插入n個(gè)elem數(shù)據(jù),無返回值。

2?vector.insert(pos,beg,end); ??//在pos位置插入[beg,end)區(qū)間的數(shù)據(jù),無返回值?

簡(jiǎn)單案例

vector<int> vecA;

vector<int> vecB;

?

vecA.push_back(1);

vecA.push_back(3);

vecA.push_back(5);

vecA.push_back(7);

vecA.push_back(9);

?

vecB.push_back(2);

vecB.push_back(4);

vecB.push_back(6);

vecB.push_back(8);

?

vecA.insert(vecA.begin(), 11); //{11, 1, 3, 5, 7, 9}

vecA.insert(vecA.begin()+1,2,33); //{11,33,33,1,3,5,7,9}

vecA.insert(vecA.begin() , vecB.begin() , vecB.end() ); //{2,4,6,8,11,33,33,1,3,5,7,9}

測(cè)試代碼:

?

[cpp]?view plain?copy

  • #include?<iostream>??
  • using?namespace?std;??
  • #include?"vector"??
  • ??
  • void?printV(vector<int>?&v)??
  • {??
  • ????for?(int?i?=?0;?i?<?v.size();i++)??
  • ????{??
  • ????????cout?<<v[i]<<?"?";??
  • ????}??
  • ????cout?<<?endl;??
  • }??
  • ??
  • //插入操作??
  • void?main1()??
  • {??
  • ????vector<int>?v1;??
  • ????v1.insert(v1.begin(),1);//在開始位置插入元素1??
  • ????printV(v1);??
  • ????v1.insert(v1.begin(),2,33);//在開始位置插入兩個(gè)33??
  • ????printV(v1);??
  • ????v1.insert(v1.begin(),v1.begin(),v1.end());//在開始位置插入整個(gè)區(qū)間元素??
  • ????printV(v1);??
  • }??
  • ??
  • ??
  • int?main()??
  • {??
  • ??????
  • ????cout?<<?"插入操作:"?<<?endl;??
  • ????main1();??
  • ????return?0;??
  • }??

  • ?

    ?

    vector的刪除

    理論知識(shí)

    2?vector.clear(); //移除容器的所有數(shù)據(jù)

    2?vec.erase(beg,end); ?//刪除[beg,end)區(qū)間的數(shù)據(jù),返回下一個(gè)數(shù)據(jù)的位置。

    2?vec.erase(pos); ???//刪除pos位置的數(shù)據(jù),返回下一個(gè)數(shù)據(jù)的位置。

    簡(jiǎn)單案例:

    刪除區(qū)間內(nèi)的元素

    vecInt是用vector<int>聲明的容器,現(xiàn)已包含按順序的1,3,5,6,9元素。

    vector<int>::iterator itBegin=vecInt.begin()+1;

    vector<int>::iterator itEnd=vecInt.begin()+2;

    vecInt.erase(itBegin,itEnd);

    //此時(shí)容器vecInt包含按順序的1,6,9三個(gè)元素。

    ?

    假設(shè)?vecInt?包含1,3,2,3,3,3,4,3,5,3,刪除容器中等于3的元素

    for(vector<int>::iterator it=vecInt.being(); it!=vecInt.end(); ) ???//小括號(hào)里不需寫 ?++it

    {

    ???if(*it == 3)

    ???{

    ????????it ?= ?vecInt.erase(it); ??????//以迭代器為參數(shù),刪除元素3,并把數(shù)據(jù)刪除后的下一個(gè)元素位置返回給迭代器。

    ?????????//此時(shí),不執(zhí)行 ?++it; ?

    ???}

    ???else

    ???{

    ???????++it;

    ???}

    }

    ?

    //刪除vecInt的所有元素

    vecInt.clear(); //容器為空

    ?

    測(cè)試代碼:

    ?

    [cpp]?view plain?copy

  • #include?<iostream>??
  • using?namespace?std;??
  • #include?"vector"??
  • ??
  • void?printV(vector<int>?&v)??
  • {??
  • ????for?(int?i?=?0;?i?<?v.size();i++)??
  • ????{??
  • ????????cout?<<v[i]<<?"?";??
  • ????}??
  • ????cout?<<?endl;??
  • }??
  • ??
  • ??
  • //刪除操作??
  • void?main2()??
  • {??
  • ????vector<int>?v1(10);??
  • ????for?(int?i?=?0;?i?<?v1.size();?i++)??
  • ????{??
  • ????????v1[i]?=?i?+?1;??
  • ????}??
  • ????printV(v1);??
  • ????v1.erase(v1.begin(),v1.begin()+4);//區(qū)間刪除??
  • ????printV(v1);??
  • ????v1.erase(v1.begin());//頭部刪除??
  • ????printV(v1);??
  • ????v1[0]?=?23;??
  • ????v1[1]?=?22;??
  • ????printV(v1);??
  • ????for?(vector<int>::iterator?it?=?v1.begin();?it?!=?v1.end();)//刪除容器里等于8的元素??
  • ????{??
  • ????????if?(*it?==?8)??
  • ????????{??
  • ????????????it?=?v1.erase(it);??
  • ????????}??
  • ????????else??
  • ????????????it++;??
  • ????}??
  • ????printV(v1);??
  • }??
  • ??
  • int?main()??
  • {??
  • ????cout?<<?"刪除操作:"?<<?endl;??
  • ????main2();??
  • ????return?0;??
  • }??

  • ?

    以下是擴(kuò)展部分:

    ?

    實(shí)戰(zhàn)c++中的vector系列--C++11對(duì)vector成員函數(shù)的擴(kuò)展(cbegin()、cend()、crbegin()、crend()、emplace()、data())

    一蓑煙雨1989 2015-12-19 18:07:00 ?6934 ?收藏 3
    分類專欄: C++ 實(shí)戰(zhàn)c++中的vector系列
    版權(quán)
    前面提到的emplace_back就是C++11所增加的內(nèi)容。

    所以這篇博客就是想羅列一下C++11對(duì)vector容器的擴(kuò)充。

    std::vector::cbegin和std::vector::cend
    這兩個(gè)方法是與std::vector::begin和std::vector::end相對(duì)應(yīng)的,從字面就能看出來,多了一個(gè)’c’,顧名思義就是const的意思。
    所以:
    std::vector::cbegin: Returns a const_iterator pointing to the first element in the container.
    std::vector::cend: Returns a const_iterator pointing to the past-the-end element in the container.

    ?

    #include <iostream> #include <vector>int main () {std::vector<int> myvector = {10,20,30,40,50};std::cout << "myvector contains:";for (auto it = myvector.cbegin(); it != myvector.cend(); ++it)std::cout << ' ' << *it;std::cout << '\n';return 0; } Output: myvector contains: 10 20 30 40 50

    std::vector::crbegin和std::vector::crend
    這兩個(gè)方法就不解釋了,與上面的相比就是多了個(gè)’r’, reverse的縮寫,反轉(zhuǎn)迭代器,代碼就省略了。

    std::vector::emplace
    之前已經(jīng)對(duì)emplace_back進(jìn)行了討論,其實(shí)還有一個(gè)方法叫emplace。
    我想說的就是,emplace之于emplace_back就像insert之于push_back。
    看英文描述就直觀:

    emplace:Construct and insert element
    emplace_back:Construct and insert element at the end

    如何使用:

    #include <iostream> #include <vector>int main () {std::vector<int> myvector = {10,20,30};auto it = myvector.emplace ( myvector.begin()+1, 100 );myvector.emplace ( it, 200 );myvector.emplace ( myvector.end(), 300 );std::cout << "myvector contains:";for (auto& x: myvector)std::cout << ' ' << x;std::cout << '\n';return 0; }


    Output:
    myvector contains: 10 200 100 20 30 300

    std::vector::data
    Returns a direct pointer to the memory array used internally by the vector to store its owned elements.

    #include <iostream> #include <vector>int main () {std::vector<int> myvector (5);int* p = myvector.data();*p = 10;++p;*p = 20;p[2] = 100;std::cout << "myvector contains:";for (unsigned i=0; i<myvector.size(); ++i)std::cout << ' ' << myvector[i];std::cout << '\n';return 0; } Output: myvector contains: 10 20 0 100 0


    std::vector::shrink_to_fit
    Requests the container to reduce its capacity to fit its size.
    就是減少空間

    #include <iostream> #include <vector> int main () {std::vector<int> myvector (100);std::cout << "1. capacity of myvector: " << myvector.capacity() << '\n';std::cout << "1. size of myvector: " << myvector.size() << '\n';myvector.resize(10);std::cout << "2. capacity of myvector: " << myvector.capacity() << '\n';std::cout << "2. size of myvector: " << myvector.size() << '\n';myvector.shrink_to_fit();std::cout << "3. capacity of myvector: " << myvector.capacity() << '\n';std::cout << "3. size of myvector: " << myvector.size() << '\n';return 0; } //輸出 1. capacity of myvector: 100 1. size of myvector: 100 2. capacity of myvector: 100 2. size of myvector: 10 3. capacity of myvector: 10 3. size of myvector: 10

    ?

    #include <iostream> #include <string> #include <vector> using namespace std;struct Foo{ public:Foo () = default;Foo(int n,double x):id(n),price(x){}void print()const{cout << "id is:" << id;cout << ";price is:" << price << ".";} private:int id = 110;double price = 1.123; }; typedef vector<Foo> VECTORFOO; void print(const VECTORFOO &); int main() {VECTORFOO v;v.emplace(v.begin(),42,3.1416);v.emplace(v.begin(),Foo(43,3.1417));// v.insert(v.begin(),{44,3.1418});v.emplace_back(Foo(44,3.1418));v.emplace_back(Foo(45,3.1419));v.emplace(v.end(),Foo(46,3.1420));print(v);return 0; }void print(const VECTORFOO & vec) { int i = 1;for(VECTORFOO::const_iterator it = vec.begin() ; it != vec.end(); ++it){cout << "Elem " << i <<" is:";(*it).print();cout << endl;++i;}}r@r-Sys:~/9/delete_and_add_element$ ./123 Elem 1 is:id is:43;price is:3.1417. Elem 2 is:id is:42;price is:3.1416. Elem 3 is:id is:44;price is:3.1418. Elem 4 is:id is:45;price is:3.1419. Elem 5 is:id is:46;price is:3.142.


    ?

    總結(jié)

    以上是生活随笔為你收集整理的vector插入/删除元素的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。