4

私が持っている場合

void f(vector<object> *vo) {

}

そして、ベクトルのアドレスをfに渡します

vector<object> vo;
f(&vo);

push_back()ベクトルに追加するにはどうすればよいですか?

4

1 に答える 1

12

ポインタを間接参照します。

(*vo).push_back(object());
vo->push_back(object()); // short-hand

これは言語の基本的な概念であることに注意してください。良い本を読むことで恩恵を受けることができます。


これには明らかな欠点があることに注意してください。

f(0); // oops, dereferenced null; undefined behavior (crash)

関数を安全にするには、すべての有効なポインター値を正しく処理する必要があります(はい、nullは有効な値です)。ある種のチェックを追加するか、次のようにします。

if (!vo) return;
// or:
if (!vo) throw std::invalid_argument("cannot be null, plz");

または、参照を使用して関数を本質的に正しくします。

void f(vector<object>& vo) // *must* reference a valid object, null is no option
{
    vo.push_back(object()); // no need to dereference, no pointers; a reference
}

これで、有効な参照を提供する責任は関数の呼び出し元にあります。

于 2011-03-18T05:47:41.350 に答える