如何在C ++中将3个元素的向量推回到向量中?

时间:2016-10-02 07:50:35

标签: c++ loops vector

我有一个很长的值向量,一个行/列大小的指定用户输入。我需要从长长的矢量列表中将一组3个数字分配到一个矢量中。具有3个数字集的向量将被推回到另一个向量中,具有用户输入的行/列大小。 1列= 3数字向量集,依此类推,直到每列都填写完毕。我在制作这段代码时遇到了麻烦(需要在循环中)。有什么帮助吗?

The picture is an example of a 4x4 vector, with each column a vector of 3 numbers

2 个答案:

答案 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循环。