環境 VC8
よろしくお願いします。
vector <vector<int> > Array(int rhs, vector<int>(int lhs))
このような、2次元配列を、定義して、Array[][]のような形式で
使うことには、不住してないのですが。
この形式の配列を、引数に持つ関数を作成したくて、プロトタイプを下記のように、書き
ましたが
void Transformation(const vector <vector<int> >& array(int rhs, vector<int>(int
lhs)));
実際に使う場合、引数の記述は、どのように書けば良いのでしょうか、ご教示願います。
また、このような2次元配列等を、引数に持つような方法は、よろしくないのでしょうか?
柴田望洋先生の、ポインタの極意には、配列や構造体を引数に与える関数は、余り好まし
くないような、記述があったと思うのですが、Effective STLなどでは、配列や
ベクター型の引数ではないのですが、クラス(構造体)の参照渡しの解説などが、記載さ
れています。
参照渡しにすれば、コピーコンストラクターも、発生しないので、問題も少ないと、思う
のですが、如何なものでしょう、皆様のご見解をご教示して頂ければ、幸いです。
以上よろしくお願いいたします。
vector <vector<int> > Array(int rhs, vector<int>(int lhs))
この時点で俺にはよくわからん。
Arrayって変数なの?関数なの?
なんで(int rhs, vector<int>(int lhs))があって、最後に;が無いの?
>実際に使う場合、引数の記述は、どのように書けば良いのでしょうか、ご教示願います。
この形式の配列ってさらにArrayを配列にするの?
俺個人としてはtypedef使ってほしいな。
どれがどれを修飾しているのか読むのが面倒。
>また、このような2次元配列等を、引数に持つような方法は、よろしくないのでしょうか?
どのようなものか俺には理解できてないけど、いいと思う。
柴田望洋氏の本はC言語でC++じゃないから参照という説明が無いとか?推測だけど
参照なら実質ポインタを渡すのと同じだからコピーを回避したいという理由ならok
wclrp ( 'o') さん。お世話になります。
>この形式の配列ってさらにArrayを配列にするの?
そういう意味ではなくて、下記のような事が行いたいのですが。
>どれがどれを修飾しているのか読むのが面倒。
すみませんでした、こんな感じで宜しいでしょうか。
>参照なら実質ポインタを渡すのと同じだからコピーを回避したいという理由ならok
直に、値を渡さなくても、間接的に操作すれば良いということで、納得しました。
#include <iostream>
#include <vector>
using namespace std;
typedef vector <vector<int> > WArray;
void Transformation(const WArray& warray(int rhs, vector<int>(int lhs)));
int main()
{
WArray warray(2, vector<int>(3));
warray[0][0] = 10; //この配列をTransformation関数へ渡したい
return 0;
}
void Transformation(const WArray& warray(int rhs, vector<int>(int lhs)))
{
//この関数内でwarrayが操作したい
//cout << warray[0][0] << endl;
}
俺、思うんだけどさあ
> (int rhs, vector<int>(int lhs)
これって、WArrayの引数付きコンストラクタの書式であって
変数の型はWArrayじゃないの?
typedef vector <vector<int> > WArray;
void Transformation(const WArray& warray)
{
cout << warray[0][0] << endl;
cout << warray[0][1] << endl;
cout << warray[0][2] << endl;
cout << warray[1][0] << endl;
cout << warray[1][1] << endl;
cout << warray[1][2] << endl;
}
void test()
{
WArray warray(2, vector<int>(3));
warray[0][0] = 100;
warray[0][1] = 101;
warray[0][2] = 102;
warray[1][0] = 110;
warray[1][1] = 111;
warray[1][2] = 112;
Transformation(warray);
}
wclrp ( 'o')さんお世話になります。
>これって、WArrayの引数付きコンストラクタの書式であって
>変数の型はWArrayじゃないの?
そう考えると、ごもっともですね。
宣言時に、暗黙のうちに、引数付のコンストラクタを、作っているんですね
というか、そのような形式が取れないような、宣言でないと、認めないといった処なんで
しょうかね。
その様に考えると、私には
Array& warray;
が
Array& warray(int rhs, vector<int>(int lhs)));
も、含めて雄弁に語って、いるかのように思えます、難しいけど面白いですねC++って
ありがとうございました。