2016-10-02 58 views
-2

我有一個很長的向量值,一個指定的行/列大小的用戶輸入。我需要從一長串向量列表中將一組3個數字分配到一個向量中。具有3個數字集的矢量將被推回到另一個矢量中,用戶輸入行/列大小。 1列= 3號矢量集等,直到每列填寫完畢。我無法制作此代碼(它需要在一個循環中)。請幫忙嗎?如何在C++中將3個元素的向量推回到一個向量中?

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

+0

等待,所以矢量'list'的大小爲mapRows * mapColumns。是對的嗎? –

+0

從你的問題,你是否不清楚你是否使用一個矢量或矢量矢量(來表示一個矩陣)。 –

+0

我的向量是temp1,它只是一個很長的一組數字。我需要取出3個數字,將它們設置爲一個矢量,然後將該矢量放入另一個矢量,其中的矢量具有來自用戶輸入的列+行大小。 3個數字實際上是一個RGB設置,所以最後如果我的向量必須是row = 2和column = 2 – Lina

回答

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. 
} 

注意,如果你打印出來,列將出現在控制檯行。如果你關心控制檯中的格式化,它會花費更多的精力,可能值得作爲一個單獨的問題提出問題。

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循環。

相關問題