我们可以使用Back() - 值索引在其上执行向量插入

Can we perform insert on a vector using back()-value index on it?

本文关键字:执行 插入 向量 索引 可以使 Back 我们      更新时间:2023-10-16

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

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

,显示的错误为

没有过载函数的实例" std :: vector< _ty,_alloc> :: insert [with _ty = int,_alloc = std ::分配器]"匹配参数列表

我尝试在网上寻找这样的例子,这在此上找不到太多。有人可以告诉我我在这里做错了什么?我是STL和C 14

的新手

... 使用其他向量的切片插入向量中的值,然后将其放在后面...

解决方案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::back_insert_iterator使用std::copy算法:

  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

insert方法接受迭代器作为第一个参数(例如,请参见cppReference)。要在背面插入lemt,您可以尝试以下内容:

vec.insert(vec.end(), value);