如何将向量中每个顺序递增的序列存储到新向量中

How to store every sequentially increasing sequence in a vector into new vectors

我有一个包含以下元素的向量: std::vector<int> vectorOfInts{ 95, 137, 138, 139, 140, 156, 157, 158, 159 };

问题:我正在尝试将每个序列存储在一个新向量中,其中每个序列被定义为一个按顺序递增的值列表(递增 1)。

vectorOfInts的一些属性:

对于这个例子,有 3 个序列:[95][137, 138, 139, 140][156, 157, 158, 159]95 是序列 1 的第一个和最后一个元素,137 是序列 2 的第一个元素,140 是序列 2 的最后一个元素,156 是第一个序列 3 的元素,159 是序列 3 的最后一个元素。

我必须为每个序列将序列存储在一个新的不同向量中,即 std::vector<int> vec1 = {95}std::vector<int> vec2 = {137, 138, 139, 140}std::vector<int> vec3 = {156, 157, 158, 159}

我想我必须遍历 vectorOfInts 并检查下一个索引处的数字是否比当前索引处的数字大 1。我还考虑过根据某些标准对 vectorOfInts 进行分区。

一些伪代码:

#include <vector>

int main()
{
  std::vector<int> vectorOfInts{ 95, 137, 138, 139, 140, 156, 157, 158, 159 };
  std::vector<int> vec1;
  std::vector<int> vec2;
  std::vector<int> vec3;
  for (size_t i = 0; i < vectorOfInts.size(); i++)
  {
    vec1.push_back(vectorOfInts[i])
    if (vectorOfInts[i + 1]  is one greater than vectorOfInts[i])
    {
      vec1.push_back(vectorOfInts[i]);
    }
    else
    {
      vec2.push_back(vectorOfInts[i]);
    }
  }
return 0;
}

您可以使用此算法:创建一个向量向量,其中一个向量包含输入向量的第一个元素。这些是输出向量。对于第一个之后的输入向量的每个元素,如果该元素不是前一个元素+1,则将一个新向量推到输出。将当前元素插入最后一个输出向量。

感谢@eerorika

,我解决了我的问题

代码如下:

std::vector<int> vectorOfInts{ 95, 137, 138, 139, 140, 156, 157, 158, 159 };
std::vector<std::vector<int>> matrixOfIndicies;
matrixOfIndicies.push_back(std::vector<int>(1, vectorOfInts[0]));

for (size_t i = 1; i < vectorOfInts.size(); i++)
{
    if (vectorOfInts[i] != (vectorOfInts[i - 1] + 1))
    {
        matrixOfIndicies.push_back(std::vector<int>(1, vectorOfInts[i]));
    }
    else
    {
        matrixOfIndicies.back().push_back(vectorOfInts[i]);
    }
}