Programing/C- programing

c++ STL 2차원 vector 배열 만들기

sosal 2014. 6. 7. 20:01
반응형

/*

 http://sosal.tistory.com/
 * made by so_Sal
 */


배열을 이용하여 2차원 배열을 만들면, 크기 조절, 인덱스 조절이 불편해서

vector를 이용하여 2차원 배열을 만드는 방법을 공부했습니다.

vector를 인자로 가지는 vector를 만들어서, row의 개수만큼 만드는 방법이 있지만

코드가 길어져서 한번에 크기를 결정하는 방법을 생각해봤습니다.



#include<iostream>

#include<stdio.h>

#include<vector>

#include<algorithm>

#include<string>

#include<iomanip>

#include<cmath>

#include<iomanip>

using namespace std;

 

 

vector<vector<double>> table;

 

int main(){

 

    int row = 15;

    int col = 10;

    table.assign(row, vector<double>(col, 1));

   

    for(int i=0;i<table.size(); i++){

        for(int j=0;j<table[i].size(); j++){

            cout<<setw(2)<<table[i][j]<<" ";

        }cout<<endl;

    }

}







assign 함수는 벡터에 들어가는 노드의 개수와 값을 받아

실제로 벡터에 할당하는 역할을 하는 함수입니다.


ex) vt 벡터에 5라는 값을 가지는 노드를 10개 추가하는 예제.


vector<int> vt;

vt.assign(10, 5);





하지만 2차원 벡터이기 때문에 두번째 인자는 실제 데이터가 아니라 또다른 벡터여야겠죠?

그래서 2차원 벡터를 assign 해줄 때, vector의 생성자 함수를 넣어줘야 합니다.


위 예제중에 table.assign(row, vector<double>(col, 1)); 에서

2번째 인자인 vector<double>(col, 1)은

col개 만큼의 1이라는 데이터를 가지는 벡터의 생성자 함수입니다.




따라서 table.assign(row, vector<double>(col, 1)); 는

1이라는 데이터를 col개만큼 가지는 vector를 row개만큼 생성하라는 뜻이 됩니다.