【问题标题】:Can we perform insert on a vector using back()-value index on it?我们可以使用 back()-value 索引对向量执行插入操作吗?
【发布时间】:2017-11-29 20:26:35
【问题描述】:

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

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

显示的错误是

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

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

【问题讨论】:

  • tempVector.insert(tempVector.end() inputs.end() - temp, inputs.begin() + loopVar); ? (假设inputs.end() - temp &lt;= inputs.begin() + loopVar
  • insert() 期望第一个参数中有一个迭代器。 back() 返回(引用)最后一个元素值,而不是最后一个元素的迭代器。要获取最后一个元素的迭代器,请改用end()-1(假设vector 不为空)。然后您可以根据需要从该迭代器中减去。

标签: c++ vector stl


【解决方案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

【讨论】:

    【解决方案2】:

    insert 方法接受一个迭代器作为第一个参数(例如,参见cppreference)。要在后面插入元素,您可以尝试以下操作:

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

    【讨论】:

      猜你喜欢
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多