2016-10-02 12 views
-2

私は値の長いベクトル、行/列サイズの指定されたユーザー入力を持っています。私はベクトルの長いリストから、ベクトルに3つの数値のセットを割り当てる必要があります。 3つの数値セットを持つベクトルは、ユーザー入力行/列サイズを持つ別のベクトルにプッシュバックされます。 1列= 3列のベクトル集合など、すべての列が記入されるまで続きます。私はこのコードを作るのに問題があります(ループに入る必要があります)。助けてください?3要素のベクトルをC++のベクトルにプッシュバックする方法は?

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

+0

waitですから、 'list'ベクトルはmapRows * mapColumnsのサイズを持ちます。そうですか? –

+0

あなたがベクトルまたはベクトルのベクトルを使用するかどうかは、あなたの質問からは不明です(行列を表すために)。 –

+0

私のベクトルはちょうど長い一連の数字であるtemp1です。私は3つの数字を取り出し、それらをベクトルにセットしてから、そのベクトルを別のベクトルに入れて、WHICHがユーザー入力からの列+行サイズを持つ必要があります。 3つの数字は実際にはRGBセットなので、もし私のベクトルが行= 2と列= 2でなければならない場合は、 – Lina

答えて

0

あなたが「長いベクトル」内の各小さいベクトルは3つの値の列を表し、ネストされたベクトルを、したいかのように聞こえます。もしそうなら、次のようにすることができます:

最初の行では、私たちの列を表すベクトルを宣言し、内部に3つの整数を配置します。 2行目で別のベクトルを宣言しますが、今回はintを含むベクトル、つまり列ベクトルでいっぱいのベクトルを含みます。次に、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. 
} 

これを印刷すると、列はコンソールに行として表示されます。コンソールで書式設定を気にする場合は、もう少し手間がかかり、別の質問として質問する価値があります。

0

1つの可能なアプローチは、次のようになります。

#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ループを変更するだけの簡単さ。

関連する問題