簡體   English   中英

通過在插入點“替換”迭代器來插入C ++向量(比較復雜)

[英]Insert C++ vector by “replacing” the iterator at the insertion point (with a complication)

是否有一種簡單的方法可以將向量添加到另一個向量中,然后在插入位置刪除迭代器(實際上是用新向量“替換迭代器”)? 我想做的是(閱讀代碼中的注釋):

struct Data
{
    Data(int i) :d(i) {}
    vector<Data> vec;
    int d;
};
vector<Data> dataVector = { Data(1), Data(2), Data(3) };
dataVector[1].vec = { Data(41), Data(42) };

// Task: replace Data(2) in dataVector with dataVector[1].vec to get {Data(1),Data(41),Data(42),Data(3)};

for (auto it = dataVector.begin(); it != dataVector.end();) {
    if ((*it).d == 2) {
        it = dataVector.insert(it,(*it).vec.begin(),(*it).vec.end());
        // Now delete Data(2) somehow
        // it = dataVector.erase(...
    }
    else it++;
}

有沒有一種優雅的方法來實現這一目標,而又不增加n次或使用其他變量呢? 通常,我將擁有任意長度的向量,並且我希望在末尾添加新向量,但這並不是至關重要的。

我剛剛找到一個解決方案: it = dataVector.insert(it+1,it->vec.begin(),it->vec.end()); it = dataVector.erase(it-1); 也許這不是最好的方法,但即使在向量的開頭/結尾插入insertinf,它也似乎可以使用。 謝謝你的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM