2016-05-04 2 views
2

У меня есть 1D массиву {3,3,7,3,1,3,4,3,3,4,2,6,4,1,4,2,4,1} , и я знаю, что вектор должен быть порядка 3 * 6 или (м * п) в общемКак можно изменить 1d-массив на 2d-вектор?

{{3, 3, 7, 3, 1, 3}, 
{4, 3, 3, 4, 2, 6}, 
{4, 1, 4, 2, 4, 1} 
} 

Я знаю, как изменить в в 2d массив, но я новичок к вектору

int count =0; 
for(int i=0;i<m;i++) 
{ 
    for(int j=0;j<n;j++) 
{ 
if(count==input.length) 
    break; 
a[i][j]=input[count]; 
count++; 
} 
} 
+1

Непонятно, что вы на самом деле спрашиваете. –

+0

Что плохого в использовании чистых массивов ... нужна ли какая-либо конкретная операция в ? – Joel

+0

Да, в основном, и для обучения тоже. – stanxx

ответ

0

Нет такого понятия, как «2D-вектор», но вы можете иметь вектор векторов.

Я думаю, что это то, что вы хотите:

#include <vector> 
#include <iostream> 

using namespace std; 


int main() 
{ 
    // make a vector that contains 3 vectors of ints 
    vector<vector<int>> twod_vector(3); 

    int source[18] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}; 
    for (int i = 0; i < 3; i++) { 
     // get the i-th inner vector from the outer vector and fill it 
     vector<int> & inner_vector = twod_vector[i]; 
     for (int j = 0; j < 6; j++) { 
      inner_vector.push_back(source[6 * i + j]); 
     } 
    } 

    // to show that it was properly filled, iterate through each 
    // inner vector 
    for (const auto & inner_vector : twod_vector) { 
     // in each inner vector, iterate through each integer it contains 
     for (const auto & value : inner_vector) { 
      cout << value; 
     } 
     cout << endl; 
    } 

} 

Смотрите вживую: http://melpon.org/wandbox/permlink/iqepobEY7lFIyKcX

0

Один из способов создать временный вектор и заполнить его в петлю, а затем нажмите вектор Темп в оригинальный std::vector<std::vector<int>>

int array[] = { 3,3,7,3,1,3,4,3,3,4,2,6,4,1,4,2,4,1 }; 
vector<vector<int>> two_dimentional; 
size_t arr_size = sizeof(array)/sizeof(array[0]); 

vector<int> temp;        // create a temp vector 
for (int i{}, j{}; i != arr_size; ++i, ++j) { // loop through temp 
    temp.emplace_back(array[i]);    // and add elements to temp 
    if (j == 5) {        // until j == 5 
     two_dimentional.emplace_back(temp); // push back to original vec 
     temp.clear();       // clear temp vec 
     j = -1;        // j = 0 next time around 
    } 
} 

выводя std::vector<std::vector<int>> покажет:

3 3 7 3 1 3 
4 3 3 4 2 6 
4 1 4 2 4 1 
+0

вы не перемещаете temp в emplace, так что я буду копировать temp. вы должны, вероятно, std :: переместить его. но на самом деле, так как вы знаете размер, лучше сделать их впереди, как в моем ответе, поэтому позже никаких дополнительных распределений не будет. – xaxxon

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