我迷路了:除非函數調用(Z_UB-> set())在++之前,std :: string向量的迭代器才能完美工作。下面的代碼:C++迭代器隨機失效
std::vector<std::string>::iterator it = g_SPP.scenarios->getVector().begin();
std::cout << "begin of vector: " << *it << std::endl;
Z_UB->set("s1", "scn2", 350);
it++;
std::cout << "second of vector: " << *it << std::endl;
創建以下輸出
begin of vector: scn1
但是,如果我將函數調用是這樣的:
std::vector<std::string>::iterator it = g_SPP.scenarios->getVector().begin();
std::cout << "begin of vector: " << *it << std::endl;
it++;
std::cout << "second of vector: " << *it << std::endl;
Z_UB->set("s1", "scn2", 350);
結果如下,這是預期行爲:
begin of vector: scn1
second of vector: scn2
裏面的Z_UB-> set()函數沒有什麼離開,但調用本身:
void Parameter::set(std::string _i, std::string _j, float value) {
//int i = indexSets[0]->backIndex(_i);
//int j = indexSets[1]->backIndex(_j);
//data2D[0][0] = value;
}
所以,如果我叫Z_UB->設置()函數,我創建迭代器後,訪問它會使程序崩潰。我錯過了關於迭代器的事情嗎?
這裏沒有足夠的信息來診斷您的具體問題。迭代器不會「隨機地」失效,所以問題出現在你的代碼中,但是在你的代碼中這個帖子裏並不清楚問題所在。 'Z_UB'確實是'Parameter'類型的嗎?還有其他什麼類型的,可以修改底層'vector'的東西嗎?在向量的內部存儲器的大小調整過程中,矢量迭代器無效。 – Chad
getVector()是否返回對矢量或副本的引用? –
它返回的矢量副本(根據我沒有使用&任何地方) – buhmann