c++:从vector::insert返回迭代器
Posted
技术标签:
【中文标题】c++:从vector::insert返回迭代器【英文标题】:c++: Returning iterator from vector::insert 【发布时间】:2017-02-25 22:48:51 【问题描述】:我正在尝试在指定点将向量 (s1) 的元素插入到不同的向量 (s2) 中。例如,这是通过程序实现的
#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());
为什么当此页面指示迭代器返回 (http://en.cppreference.com/w/cpp/container/vector/insert) 时,编译器会认为 insert 具有 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
【讨论】:
以上是关于c++:从vector::insert返回迭代器的主要内容,如果未能解决你的问题,请参考以下文章
将派生类中的对象插入到所述对象的另一个实例中(使用 vector.insert 函数)C++