あなたはこのような多次元ベクトルを宣言することができます。
std::vector< std::vector<int> > v;
あなたも従って、コードを容易にするためのtypedefを使用することができます。
typedef std::vector<int> int_vector;
typedef std::vector<int_vector> int_matrix;
最初の例のように書くときは、閉じ角の括弧を1つ書いてはいけませんコンパイラが>>
オペレータと混乱するのを避けるために、もう1つ。
この操作にベクトル全体をコピーする必要があるため、このようなオブジェクトを関数から戻すことも避けてください。その代わりに、例えば、参照によってベクトルを渡すことができます。
void process(int_matrix& m)
{
// m.push_back(...)
}
int main(int argc, char* argv[])
{
int_matrix m;
// Initialize m here.
// ...
// Call your methods.
process(m);
// ...
return 0;
}
EDIT:
あなたはこのようなあなたのコードを構築することができます
// int_matrix.hpp
#ifndef _INT_MATRIX_HPP
#define _INT_MATRIX_HPP
#include <vector>
typedef std::vector<int> int_vector;
typedef std::vector<int_vector> int_matrix;
extern void process(int_matrix& m);
#endif // ~_INT_MATRIX_HPP
。
// int_matrix.cpp
#include "int_matrix.hpp"
void process(int_matrix& m)
{
m.clear();
// ...
}
。
// main.cpp
#include "int_matrix.hpp"
#include <iostream>
int main(int argc, char* argv[])
{
int_matrix m1;
int_matrix m2;
// ...
process(m1);
process(m2);
// ...
return 0;
}
ありがとうございます。私はベクトルが関数内で作成されるまでベクトルのサイズがわからないので、デフォルト値を持たないmainでこれを定義し、それを参照渡しする必要がありますか? –
@JackFarrowあなたは確かにそれを行うことができます。また、 'main'で初期化することもできず、値で返すこともできません:'ベクトル> myVect = function(4、6); ' –
dasblinkenlight
ありがとう。上記のコードで何が起きているのか説明できますか?私はこれがベクトル(intのような、myVectと呼ばれる)を定義していると仮定し、それを関数内で作成されたベクトル値にアサインしますか?この最高のパフォーマンスは賢明ですか? –