43
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

C++でvectorを参照渡し

Last updated at Posted at 2018-05-10

#C++でvectorを関数に参照渡しをする

Box.hpp
/* 中略 */
void Hotaru::hitBox(vector<Box> box, int index) {
    for (int i = 0; i < box.size(); i++) {
        if (index == i) {
            box.erase(box.begin() + i);
        }
    }
}

静的配列なら配列名を渡すとメモリ上の配列の先頭アドレスを渡します。
なので関数で値を変更すると本体の配列の値も変更されます。

vectorでも同じなのだろうと思い上記のコードを実行して見ると、boxを渡した元の関数内では値が変更されませんでした。

どうやらboxの値の変更を呼びたし元に反映させるには参照渡しを使うべきだそうです。
実際のコードが以下の通りです(1文字しか変わっていませんが)

Box.cpp
/* 中略 */
void Hotaru::hitBox(vector<Box>& box, int index) {
    for (int i = 0; i < box.size(); i++) {
        if (index == i) {
            box.erase(box.begin() + i);
        }
    }
}

引数の部分を

vector<Box>& box

に変更します。
C++の「参照渡し」を使います
こうすることで関数内の変更が呼び出し元のvector自体にも反映されます。

C++のポインタ、参照渡し、値渡しについてはこちらの方が詳しく説明してくださっていたので載せておきたいと思います
C++ 値渡し、ポインタ渡し、参照渡しを使い分けよう

43
17
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?