簡體   English   中英

用迭代器插入向量

[英]insert into a vector with iterator

我必須使用迭代器將元素插入向量中的特定位置。 我不能使用insert()函數(我已經獲得了明確的指導方針,我應該在沒有insert()的情況下做到這一點)。

這是我的代碼(或者至少是弄亂的部分):

cerr << "distance before resize: " << distance(wl.begin(), pos) << endl;
wl.resize(wl.size()+1);
cerr << "distance after resize: " << distance(wl.begin(), pos) << endl;
move_backward(pos, wl.end()-1, wl.end());
(*pos) = temp;

我的輸出:

distance before resize: 0
distance after resize: -322

如此看來,我的調整大小弄亂了迭代器pos。 有想法該怎么解決這個嗎?

編輯:您可能想知道我如何聲明我的迭代器:

auto pos = wl.begin();

您可以組合std::vector::push_back在后面插入新元素,然后從<algorithm>插入std::rotate rotate將最后一個元素旋轉到所需位置。

當然push_back不會保留迭代器,因此請首先使用std::distance(v.begin(), it) (來自<iterator> )來確定所需位置的索引。

調整大小不能保留迭代器,因為調整大小操作可能會使迭代器指向的內容無效。

Stardard程序將首先檢查是否需要調整大小,然后在可選的調整大小操作之后,以所需的任何方式繼續插入新元素。

調整向量的大小會使其迭代器無效。 在調用resize()pos不是有效的迭代器,應再次將其重新分配給wb.begin()

聽起來,本練習的目的是教您關於迭代器無效的知識 ,因此您應該問自己的問題是:“是否有等效於迭代器且不會失效的等效項?”

暫無
暫無

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

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