[英]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,則將一個新向量推入輸出。 將當前元素插入到最后一個輸出向量。
感謝@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.