這種說明性程序被成功編譯併產生預期的結果
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> gid = { 2, 1, 5, 6, 1, 6, 2, 5 };
std::sort(gid.begin(), gid.end());
std::vector<int>::iterator itv(std::unique(gid.begin(), gid.end()));
gid.erase(itv, gid.end());
for (int x : gid) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
輸出是
1 2 5 6
我可以懷疑你通過值而不是通過引用傳遞載體的功能。因此,您可以更改原始矢量的副本。例如
#include <iostream>
#include <vector>
#include <algorithm>
void remove_duplicates(std::vector<int> gid)
{
std::vector<int>::iterator itv(std::unique(gid.begin(), gid.end()));
gid.erase(itv, gid.end());
}
int main()
{
std::vector<int> gid = { 2, 1, 5, 6, 1, 6, 2, 5 };
std::sort(gid.begin(), gid.end());
remove_duplicates(gid);
for (int x : gid) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
輸出將是
1 1 2 2 5 5 6 6
但如果你將改變參數聲明類似
#include <iostream>
#include <vector>
#include <algorithm>
void remove_duplicates(std::vector<int> &gid)
{
std::vector<int>::iterator itv(std::unique(gid.begin(), gid.end()));
gid.erase(itv, gid.end());
}
int main()
{
std::vector<int> gid = { 2, 1, 5, 6, 1, 6, 2, 5 };
std::sort(gid.begin(), gid.end());
remove_duplicates(gid);
for (int x : gid) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
那麼結果會像預期的
1 2 5 6
另一個原因ca如果向量是類的數據成員,而不是使用此數據成員,則在某些成員函數中使用向量的局部定義。這是初學者的一個普遍錯誤。
所以你需要檢查你是否確實在每個操作中處理原始矢量。
按預期運行[此處](https://ideone.com/VghsbZ)。 – Jarod42 2014-11-06 14:11:11
最有可能你的代碼檢查後向量中的內容是錯誤的。 – 2014-11-06 14:12:12
除非您提供的代碼能夠複製您正在觀察的行爲,否則我們無法爲您提供幫助。代碼似乎是正確的。 – 2014-11-06 14:12:38