3

temp.insert(it);で、挿入する呼び出しに一致するメンバー関数がありませんというエラーが発生し続けます。これは、コード一時のある時点でベクトル以外のものになったことを意味します。誰かアイデアはありますか?

#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;
}

元の質問を手伝ってくれてありがとう、私は多くのことを学びました。

4

2 に答える 2

6

の 3 つの (C++11 より前の) 有効な署名は次のstd::vector::insertとおりです。

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);

そのオプションは存在しません。上記の 3 つのいずれかから選択する必要があります。


余談ですが (ildjarn が指摘したように)、C++11 ではさらに追加が行われ、一部が削除されています。とにかく、あなたが呼んでいる方法ではどれも有効ではありません。参照: http://en.cppreference.com/w/cpp/container/vector/insert

于 2012-10-04T00:39:36.320 に答える
4

これは、私のコード温度のある時点で、ベクトル以外のものになったことを意味します

いいえ、そうはなりませんでした。もっと言えば、そんなことはあり得ない

次の関数は存在しません。イテレータだけを取るマッチング関数はありません。

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

たとえば、次のようにしてください。

temp.insert(it, 7); // will insert 7 immediately prior to end()
于 2012-10-04T00:38:40.577 に答える