[英]Insert an element to a vector at run time C++.Throwing Runtime Error
我想在運行時將一些元素插入向量中。 我來啦。
目的是打印"Hello Hi I am Rasmi"
int main()
{
vector<string>vect;
vect.push_back("Hello");
vect.push_back("Hi");
vect.push_back("Rasmi");
for(vect<string>::iterator it = vect.begin(); it != vect.end(); ++it)
{
if(*it == "Rasmi") // If it encounters "Rasmi"
{ it--;
vect.insert(vect.begin()+2, "I am");
}
cout << *it;
}
}
但是它拋出運行時錯誤。
vect.insert(vect.begin()+2, "I am");
}
cout << *it;
更改擁有的容器后,迭代器將失效-即it
在insert
或push_back
后不能使用it
。
添加元素后,可能需要自動調整向量的大小並重新分配,如果發生這種情況,則迭代器將不再有效。
盡管我真的不知道為什么需要這樣做,但是有一個安全的解決方法。 您可以存儲迭代器的當前索引,將新元素插入向量中,然后重新分配迭代器以引用潛在的新內存地址。 我已經在此處包含執行此操作的代碼。
if(*it == "Rasmi") // If it encounters "Rasmi"
{
it--;
int index = it - vect.begin (); // store index of where we are
vect.insert(vect.begin()+2, "I am");
it = vect.begin () + index; // vect.begin () now refers to "new" begin
// we set it to be equal to where we would want it to be
}
cout << *it;
一旦std :: vector :: insert()的重載之一具有簽名的迭代器插入(迭代器位置,const T&x),您可以按以下方式重寫代碼
for(vect<string>::iterator it = vect.begin(); it != vect.end();)
{
if(*it == "Rasmi") // If it encounters "Rasmi"
{
it = vect.insert(it, "I am");
cout << *it;
++it;
}
cout << *it;
++it;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.