2014-04-25 56 views
0

矢量我試圖刪除由if語句定義一個特定的值,然後存儲爲一個int,我希望再通過矢量外觀和使用的std ::刪除指定元素

刪除它
if (comparedValuesBetween2[i] == First0ValueFor0Number2[j]) 
{ 
    //make sure if there are no values to compare left just leave the the while loop by editing the count. 
    comparedValuesBetween2.resize(std::remove(comparedValuesBetween2.begin(), comparedValuesBetween2.end(), 8) - comparedValuesBetween2.begin()); 
} 

但即時得到這些錯誤,我不知道爲什麼,如果你能幫助

6 IntelliSense: too many arguments in function call g:\08227 acw\ACW\Sudoku\Sudoku\main.cpp 225

5 IntelliSense: no suitable conversion function from "std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>" to "const char *" exists g:\08227 acw\ACW\Sudoku\Sudoku\main.cpp 225

我對C++很陌生。謝謝你的幫助。

+0

「comparisonValuesBetween2」和「First0ValueFor0Number2」的類型可能是照亮的 – Yakk

回答

1

你可以簡單地調用std::vector::erase()從容器中刪除指定的元素:

if (comparedValuesBetween2[i] == First0ValueFor0Number2[j]) 
    comparedValuesBetween2.erase(comparedValuesBetween2.begin() + i); 
+0

這擺脫了錯誤,但是當我運行程序我得到錯誤,表達式:向量迭代器+偏移超出範圍?你知道爲什麼嗎? – user3573663

+0

@ user3573663可能'i'大於它的大小。檢查一下。 – herohuyongtao

0

而且,只是一個側面說明,vector.erase()返回一個指向向量中的下一個元素的迭代器。所以如果你通過一個迭代器遍歷你的向量,你必須確保在刪除向量中的一個元素後,你不會丟失迭代器的軌跡。

0

您並未真正提供足夠的信息來了解您正在努力實現的目標。我想ij是循環索引?

做它的「習慣」的方式被稱爲刪除/擦除成語:

for(int j; .....) { 
    ... 
    if(....) { 
     comparedValuesBetween2.erase(std::remove(comparedValuesBetween2.begin(), comparedValuesBetween2.end(), First0ValueFor0Number2[j])); 
    } 
} 

它取決於究竟是你的使用情況進行細化。理想情況下,j上的循環也不應該是一個原始循環。