2017-02-25 60 views
1

返回迭代器我試圖插入一個向量(s1)到一個不同的向量(s2),在一個指定的點的元素。作爲一個例子,這是用程序實現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()); 
然而

我收到編譯錯誤

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返回時,該頁面顯示的迭代器返回(http://en.cppreference.com/w/cpp/container/vector/insert) 。注意,這個例子很簡單,因爲我能得到的迭代初始插入的元素與

it = s2.begin(); 

但這不是一般

回答

1

是真實的寫作,我的問題的行爲幫助我找到答案(如通常)。我想我會留下後代的問題,並立即給出答案。

線索就在cppreference頁面(duh)。插入函數的void實現存在,直到C++ 11;自C++ 11以來的迭代器實現。因此,這個問題只與我的編譯器有關。爲了解決這個問題,我剛剛編譯了-std = C++ 11標誌:

g++ -std=c++11 -o vector_insert vector_insert.cc