Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 335
  • Last Modified:

2d vector help

I'm hoping someone could help me with 2-d vectors.

Could someone tell me how to:

1.  perform a push_back on a 2d vector
2.  perform a resize on a 2d vector
3.  make a copy of a 2d vector

Thanks!
0
cfans
Asked:
cfans
  • 3
2 Solutions
 
rajeev_devinCommented:
For 1.

vector<vector<int> > matrix;

vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);

matrix.push_back(v);
0
 
DrAskeCommented:
1)
vector< vector<int> > matrix(max_index); // to set the size of the array

for(int i = 0; i<matrix.size(); ++i)
    matrix[i].reserve(max_index);  // to set the size of each column .. Now the matrix is (max_index X max_index)

// set all indecies to 0
for(int x = 0 ;x<matrix.size(); ++x)
    for(int y = 0 ; y<matrix[0].size(); ++y)
           matrix[i][j] = 0;

OR:

vector<int> v(max_index);
vector< vector<int> vv(max_index);
for(int i = 0; i<v.size(); ++i)
    v.push_back(0);

vv.push_back(v);


2)

matrix.resize(max_index+1, vector<int>(max_index)); // max_index+1 is the new size of the matrix

3)
I didn't do that before, but try this

vector< vector<int> > copyMatrix = matrix;

regards,Ahmad;


0
 
rajeev_devinCommented:
2.
//for 10x20
vector<vector<int> > matrix;

matrix.resize(10);
for (int i = 0; i < 10; ++i)
   matrix[i].resize(20);

0
 
rajeev_devinCommented:
Copy is already suggested by DrAske.
0
 
itsmeandnobodyelseCommented:
You can set both dimensions when creating the 2d array, e. g.

    vector<vector<int> > matrix(10, vector<int>(20, 0) );  // 10 x 20 all zeros

>>>> 1.  perform a push_back on a 2d vector

push_back is an operation defined for a 1d array. So if you look at the first index as the ROW index, you would add a new row by push_back.

For a 2d array push_back isn't well defined cause normally a 2d array has the same column size for all rows. A push_back for a row would add one cell to that row, what might be strange. If you want to increase the number of columns for all rows you better use the resize function for any row:

 vector<vector<int> >::iterator i;
 for (i = matrix.begin(); i != matrix.end(); ++i)
       i->resize(i->size()+1, 0);  // increment and set to 0


Regards, Alex

0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now