Vector不接受insert作为函数

时间:2012-10-04 00:32:06

标签: c++

在第temp.insert(it);行我不断收到错误没有匹配的成员函数来调用insert,这意味着在我的代码中某些时候temp变成了一个不是vector的东西。有人有什么想法吗?

#include <iostream>
#include <vector> 

using namespace std;

vector<int> removeDuplicates(vector<int> stuff)
{

vector<int> temp;
vector<int>::iterator it;

for(vector<int>::size_type i = 0; i < stuff.size(); i++){
    //iterator to find stuff
    it = find(stuff.begin(), stuff.end(), stuff);

    //if it not in temp then add it
    if (it == temp.end()) {
        temp.insert(it); //No matching member function for call to insert
    }
}

return temp;


}

int main(int argc, const char * argv[])
{


vector<int> values;
for(int i = 0; i < 5; i++){
    values.push_back(i);
    values.push_back(i+1);
}

removeDuplicates(values);
return 0;
}
很好,答案帮了我很多,但我决定改写代码,这就是我得到的东西,它似乎工作得很好

#include <iostream>
#include <vector> 

using namespace std;

vector<int> removeDuplicates(vector<int> oldvector)
{

// newvector to hold non-duplicates
vector<int> newvector;

vector<int>::iterator it;



for(vector<int>::size_type i = 0; i < oldvector.size(); i ++){

    //If it find a value then it returns the first element
    it = find(newvector.begin(),newvector.end(), oldvector[i]);
    if(it == newvector.end()){
        newvector.push_back(oldvector[i]);
    }



}

return newvector;


}

int main(int argc, const char * argv[])
{


vector<int> values;
vector<int> newvalues;

for(int i = 0; i < 5; i++){
    values.push_back(i);
    values.push_back(i+1);
}



newvalues = removeDuplicates(values);

//Print out the vector without duplicates
for(vector<int>::size_type i = 0; i < newvalues.size(); i ++){
    cout << newvalues[i] << "\t";

}

return 0;
}

感谢原始问题的帮助,我学到了很多东西。

2 个答案:

答案 0 :(得分:6)

std::vector::insert的三个(pre-C ++ 11)有效签名是:

iterator insert ( iterator position, const T& x );
    void insert ( iterator position, size_type n, const T& x );
template <class InputIterator>
    void insert ( iterator position, InputIterator first, InputIterator last );

您选择了无效的选项#4:

temp.insert(iterator);

该选项不存在,您必须从上面列出的三个中选择一个。


在旁注(正如ildjarn指出的那样),C ++ 11增加了更多...并且需要一些时间。无论如何,它们都不会像你调用它那样有效。请参阅:http://en.cppreference.com/w/cpp/container/vector/insert

答案 1 :(得分:4)

  

这意味着在我的代码中某些时候temp变成了一个不是向量的东西

不,那没发生。更重要的是,无法发生。

以下功能不存在。没有matching function只需要一个迭代器。

temp.insert(it); //No matching member function for call to insert

尝试,例如,

temp.insert(it, 7); // will insert 7 immediately prior to end()