[英]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.