vector有关unique以及sort

算法原题:给定一个整数数组和一个整数k,你需要找到数组中的独特k-diff对数。这里的k-diff对定义为一个整数对(i,j),其中i和j是数组中的绝对差异数K。
问题在k为0时,我打算用sort、unique将前面的非重复部分erase掉,但在实现时发现{-1,-1,-1, 0, 1, 3}执行过后就变成了{-1, 0, 1, 3,1,3},是否跟内存分配有关?

#include
#include
#include
using namespace std;
int findPairs(vector& nums, int k) {
sort(nums.begin(), nums.end());
for (vector::iterator it = nums.begin(); it != nums.end(); ++it){
cout << "-1第:" << *it << endl;
}

int num = 0;
if (k == 0){ 
    unique(nums.begin(), nums.end());
    for (vector<int>::iterator it= nums.begin(); it!=nums.end();++it){
        cout << "0第:" << *it << endl;
    }
    sort(nums.begin(), nums.end());
    for (int number = 0; number < nums.size(); number++){
        cout << "1第" << number << ":" << nums[number] << endl;
    }
    nums.erase(nums.begin(), unique(nums.begin(), nums.end()));
    for (int number = 0; number < nums.size(); number++){
        cout << "2第"<<number<<":"<<nums[number]<< endl;
    }
    nums.erase(unique(nums.begin(), nums.end()), nums.end());
    num = nums.size();

    return num; 
}
nums.erase(unique(nums.begin(), nums.end()),nums.end());
int size = nums.size();
for (int i = 0; i < size - 1; i++){
    for (int j = size - 1; j >i; j--){
        if (nums[j] - nums[i] == k){
            num++;
        }
    }

}
return num;

}
int main(){
vector nums = { -1,-1,-1, 0, 1, 3 };
cout << findPairs(nums,0) << endl;
system("pause");
}

程序结果图图片说明


看了下unique的使用,unique方法只会将vector中所有不重复的内容从begin覆盖,比如你原来vector的长度是6,使用unique后长度仍然是6,

所以需要使用resize将vector的大小转变下,具体参考:

http://www.cplusplus.com/reference/algorithm/unique/

   int myints[] = {10,20,20,20,30,30,20,20,10};           // 10 20 20 20 30 30 20 20 10
  std::vector<int> myvector (myints,myints+9);

  // using default comparison:
  std::vector<int>::iterator it;
  it = std::unique (myvector.begin(), myvector.end());   // 10 20 30 20 10 ?  ?  ?  ?
                                                         //                ^

  myvector.resize( std::distance(myvector.begin(),it) ); // 10 20 30 20 10