2016-10-02 4 views
-2

У меня есть длинный вектор значений, заданный пользователем размер строки/столбца. Мне нужно назначить набор из трех чисел в вектор из длинного списка векторов. Вектор с 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, поэтому в конце, если мой вектор должен быть row = 2 и column = 2 – Lina

ответ

0

Это звучит так, как будто вы хотите вложенных векторов, где каждый вектор меньше внутри «длинного вектора» представляет собой столбец 3 значений. Если так что вы могли бы сделать так, как:

std::vector<int> columnVec = { 1, 2, 3 }; 
std::vector<std::vector<int>> longVector; 
longVector.push_back(columnVec); 

В первой строке мы объявляем вектор, представляющий нашу колонку и поместить три целых числа внутри него. На второй строке мы объявляем другой вектор, но на этот раз содержащий векторы, которые сами содержат 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

Один из возможных подходов может выглядеть примерно так:

#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; 
    } 
} 

Хотя, это будет хранить коллекцию строк, а не набор столбцов. Достаточно легко изменить настройки для петель.

Смежные вопросы