最近我遇到了一个场景,我必须使用一片其他矢量在矢量中插入值并将其放在后面。我尝试使用vector.back() - 值,但它不允许我这样做。这是代码段
tempVector.insert(inputs.back()-temp,inputs[loopVar]);
显示的错误是
没有重载函数的实例“std :: vector< _Ty,_Alloc> :: insert [with _Ty = int,_Alloc = std :: allocator]”匹配参数列表
我试过找一些像这样的例子在网上找不到这个。有人可以告诉我,我在这里做错了什么?我是STL和c ++ 14的新手
答案 0 :(得分:1)
... 使用其他矢量切片在矢量中插入值并将其放在后面...
解决方案1:
有std::vector::insert()
重载,格式为:
template< class InputIt >
void insert( iterator pos, InputIt first, InputIt last);
所以你可以写:
std::vector<int> a = { 1, 2, 3, 4, 5 };
std::vector<int> b = { 6, 7, 8, 9, 10 };
b.insert(b.end(), a.begin() + 2, a.begin() + 5);
解决方案2:
将std::copy
算法与std::back_insert_iterator
:
std::vector<int> a = { 1, 2, 3, 4, 5 };
std::vector<int> b = { 6, 7, 8, 9, 10 };
std::copy(a.begin() + 2, a.begin() + 5, std::back_inserter(b));
进行测试:
for (auto& x : b)
std::cout << x << ' ';
将输出:6 7 8 9 10 3 4 5
答案 1 :(得分:0)
insert
方法接受迭代器作为第一个参数(例如,参见cppreference)。要在后面插入elemt,您可以尝试以下操作:
vec.insert(vec.end(), value);