我有一个很长的值向量,一个行/列大小的指定用户输入。我需要从长长的矢量列表中将一组3个数字分配到一个矢量中。具有3个数字集的向量将被推回到另一个向量中,具有用户输入的行/列大小。 1列= 3数字向量集,依此类推,直到每列都填写完毕。我在制作这段代码时遇到了麻烦(需要在循环中)。有什么帮助吗?
The picture is an example of a 4x4 vector, with each column a vector of 3 numbers
答案 0 :(得分:0)
听起来好像你想要嵌套向量,其中“长向量”中的每个较小向量代表一个包含3个值的列。如果是这样,你可以这样做:
std::vector<int> columnVec = { 1, 2, 3 };
std::vector<std::vector<int>> longVector;
longVector.push_back(columnVec);
在第一行中,我们声明一个表示我们列的向量,并在其中放置三个整数。在第二行,我们声明另一个向量,但这次包含自身包含整数的向量,即一个充满列向量的向量。然后我们使用push_back()
将列向量推入向量向量中。如果您需要打印值,可以这样做:
for(auto& vec : longVector) { //Walk through our vector of vectors.
for(int value : vec) { //Walk through our column vectors of values.
std::cout << value; //Print out each value of the column.
}
std::cout << std::endl; //Add a newline.
}
请注意,如果您打印它们,列将在控制台中显示为行。如果您关心控制台中的格式化,则需要花费更多精力,并且可能值得作为单独的问题提出。
答案 1 :(得分:0)
一种可能的方法可能如下所示:
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
int main()
{
typedef std::vector<int> VecInt;
typedef VecInt::iterator VecIntIter;
typedef std::vector<VecInt> VecVecInt;
typedef VecVecInt::iterator VecVecIntIter;
VecVecInt rows;
const int maxRows = 10, maxCols = 10;
cout << "Values during creation" << endl;
cout << "----------------------" << endl;
for (int rowNum=0; rowNum<maxRows; rowNum++)
{
VecInt curRow;
for (int colNum=0; colNum<maxCols; colNum++)
{
if (colNum != 0)
cout << " ";
int cellValue = rand() % 32;
cout << cellValue;
curRow.push_back( cellValue );
}
cout << endl;
rows.push_back(curRow);
}
cout << endl;
cout << "Values during retrieval" << endl;
cout << "----------------------" << endl;
for (VecVecIntIter rowIter=rows.begin(); rowIter!=rows.end(); rowIter++)
{
VecInt curRow = (*rowIter);
for (VecIntIter colIter=curRow.begin(); colIter!=curRow.end(); colIter++)
{
if (colIter != curRow.begin())
cout << " ";
cout << (*colIter);
}
cout << endl;
}
}
但是,这将存储行的集合,而不是列的集合。很容易改变for循环。