在二维向量 cpp 中切片

slicing in 2d vector cpp

我想在我的二维向量中创建一个新行,其中包含从索引 1 到上一行末尾的元素。我写了下面的代码,但它是错误的。你能帮帮我吗

   vector<vector<int>> res;
   k=res.size();
   res.push_back(res[k-1].begin()+1,res[k-1].end());

当您使用 vector::push_back 时,您会从向量的 value_type 中附加一个元素,并且您不能 push_back 一个范围

https://www.cplusplus.com/reference/vector/vector/push_back/

您应该调用 std::vector 构造函数来构造新行,并将其推送到您的向量:

res.push_back(vector(res[k-1].begin()+1,res[k-1].end()));

您也可以使用 {} 隐式调用构造函数,但隐式构造函数可能会使您的代码更难维护。

res.push_back({res[k-1].begin()+1,res[k-1].end()});

你只缺了一个{}:

#include <vector>
int main()
{
   std::vector<std::vector<int>> res{{1,2,3,4,5}};
   auto k=res.size();
   res.push_back({res[k-1].begin()+1,res[k-1].end()});
}

push_back 获取您需要构建的容器的一个元素,即 std::vector<int>。或者,您可以调用 emplace_back 来调用元素构造函数的参数:

res.emplace_back(res[k-1].begin()+1,res[k-1].end());