正如標題所解釋的,我出於某種原因在不同類型的向量(即字符串和整數)上使用std :: remove獲得了不同的結果。對於整數矢量,函數按預期工作,而不是實際上物理刪除元素。然而,它確實在物理上刪除了字符串向量的元素,我似乎無法弄清楚爲什麼(感覺像是我忽略的小事)。如果任何人都可以解釋爲什麼這會發生,那真是太棒了。我已經發布了下面的代碼和輸出。謝謝!std :: remove不同類型的向量的不同結果
//includes
using namespace std;
template <class T>
void printer(T value) {
cout << value << ", "
}
int main() {
string myvalues[] = { "yyy","Yyy", "yYy","yyY","ZZZ","zZZ", "ZzZ", "ZZz" };
int nums[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
vector<string> v1(myvalues, myvalues + 8);
vector<int> v2(nums, nums + 8);
sort(v1.begin(), v1.end());
remove(v2.begin(), v2.end(), 7);
remove(v1.begin(), v1.end(), "yyy");
for_each(v1.begin(), v1.end(), printer<string>);
cout << endl;
for_each(v2.begin(), v2.end(), printer<int>);
return 0;
}
輸出:
YYY,ZZZ,ZZZ,ZZZ,YYY,YYY,ZZZ,
1,2,3,4,5,6,8,8,
正如你所看到的,元素「yyy」實際上被移除了,最後一個元素爲空,而元素「7」在邏輯上被移除,而最後一個元素保持不變。
後編譯代碼。 –
聳聳肩。一旦你刪除了一個元素,你的序列就更小了,而且你不應該超越它的結尾。 –
你注意到了輸出中的雙逗號嗎? – rustyx