我们可以使用back() - 值索引对矢量执行插入吗?

时间:2017-11-29 20:26:35

标签: c++ vector stl

最近我遇到了一个场景,我必须使用一片其他矢量在矢量中插入值并将其放在后面。我尝试使用vector.back() - 值,但它不允许我这样做。这是代码段

tempVector.insert(inputs.back()-temp,inputs[loopVar]);

显示的错误是

  

没有重载函数的实例“std :: vector< _Ty,_Alloc> :: insert [with _Ty = int,_Alloc = std :: allocator]”匹配参数列表

我试过找一些像这样的例子在网上找不到这个。有人可以告诉我,我在这里做错了什么?我是STL和c ++ 14的新手

2 个答案:

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