簡體   English   中英

如何將向量中的每個順序增加的序列存儲到新向量中

[英]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的一些屬性:

  • 序列的數量是已知的,但每個序列的長度以及每個序列中的第一個和最后一個元素都是未知的。
  • 所有元素始終按從低到高排序。
  • 序列由數字列表定義,其中下一個數字比前一個數字大 1。
  • 序列的最短長度為 1。

對於這個例子,有 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,則將一個新向量推入輸出。 將當前元素插入到最后一個輸出向量。

感謝@eeerorika,我解決了我的問題

這是代碼:

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]);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM