電子書籍の厳選無料作品が豊富!

普段、vectorコンテナの可変長サイズ指定の特徴を利用していますが、一塊のコンテナの関数間でのやり取りについて、アドバイスを御願いいたします。

1)関数の引数としては、ポインタ渡しになるのですか?どんな記述になるのでしょう?

2)アクセス制限のpublic:欄に追加することで、他のクラスから参照することは可能になりますか?どんな記述になるのでしょう?

3)他の方法はありますか?

よろしく御願いいたします。

A 回答 (2件)

> 1)関数の引数としては、ポインタ渡しになるのですか?どんな記述になるのでしょう?


ポインタか参照渡しでしょう。

関数宣言はこんな感じです。
(例1) ポインタ渡し
void Func1(vector<int>* Data);
(例2) 参照渡し
void Func2(vector<int>& Data);
(例3) const参照渡し(Func内でDataを変更しないことを明示したい場合)
void Func3(const vector<int>& Data);

呼び出し側はこんな感じです。
vector<int> Data;
Func1(&Data);
Func2(Data);
Func3(Data);

2)アクセス制限のpublic:欄に追加することで、他のクラスから参照することは可能になりますか?どんな記述になるのでしょう?
可能になります。
普通のメンバ変数と同じ扱いです。

クラス定義はこんな感じでしょう。
class Hoge
{
public:
 // その他色々関数
 vector<int> Data;
};

操作するときはこのような感じになります。

Hoge hoge;
// ここでhogeに対して色々操作
for (int i = 0; i < hoge.Data.size(); ++i) {
 printf("%d\n", hoge.Data[i]);
}

3)他の方法はありますか?
恐らく様々な方法があるでしょう。
「一塊のコンテナの関数間でのやり取り」というのをもうちょっと具体的に書いて頂ければ例も書けます。

例えば、コンテナを受け取り、コンテナの各要素に対してなんらかの処理を行う関数の例

template <class ITER> void Func(ITER Begin, ITER End)
{
 for (ITER i = Begin; i != End; ++i) {
  // *iを処理する
 }
}

呼び出し側
vector<int> Data;
Func(Data.begin(), Data.end());

普通の配列も処理できます。
int Array[10];
Func(&Array[0], &Array[10]);
    • good
    • 0
この回答へのお礼

お加減様でプログラムが完成しました。

お礼日時:2004/10/12 00:06

表題のC++ Builderにはなにか意味があるのでしょうか?



1,2) 訊くまでもない。やってみればいい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!