2017-02-25 5 views
1

ベクトル(s1)の要素を、指定した点の別のベクトル(s2)に挿入しようとしています。私はINSERTコマンドが最初に挿入された要素のイテレータを返すようにしたい場合の例としては、これは、C++:vector :: insertからイテレータを返す

#include <vector> 
#include <iostream> 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
    vector<string> s1; 
    s1.push_back("Hi"); 
    s1.push_back("there!"); 

    vector<string> s2; 
    s2.push_back("How"); 
    s2.push_back("are"); 
    s2.push_back("you?"); 

    vector<string>::iterator it = s2.begin(); 
    s2.insert(it, s1.begin(), s1.end()); 

    return 0; 
} 

しかしプログラムによって実現され、私は、このコマンドが動作するはず印象の下にあった

it = s2.insert(it, s1.begin(), s1.end()); 
このページは、イテレータリターン( http://en.cppreference.com/w/cpp/container/vector/insert)を示している場合

は、しかし、私は、コンパイルエラーが発生する

vector_insert.cc:20:8: error: no match for ‘operator=’ (operand types are ‘std::vector<std::__cxx11::basic_string<char> >::iterator {aka __gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >}’ and ‘void’) 
it = s2.insert(it, s1.begin(), s1.end()); 

はなぜコンパイラは、インサートがvoidリターンを持っていると思うん。私は

it = s2.begin(); 

で初期挿入された要素にイテレータを取得する可能性があるため、この例では簡単ですが、これは私の質問を書くという行為は、私は(と答えを見つける助け一般

答えて

1

に真実ではないことに注意してくださいいつも)。私は後世の問題を残し、すぐに答えを与えるだろうと考えました。

cppreferenceページ(duh)に手掛かりがありました。 insert関数のvoid実装は、C++ 11まで存在していました。 C++ 11以降の反復子の実装したがって、この問題は私のコンパイラでのみ発生していました。修正するために、-std = C++ 11フラグを付けてコンパイルしました。

g++ -std=c++11 -o vector_insert vector_insert.cc 
関連する問題