2016-10-14 8 views
1

配列をパラメータとして渡すときは、基本的に配列のインデックスをインデックス0に渡します。次に、ハードウェアはintが通常4バイトであることを知っています。他の要素に簡単にアクセスできます。 私の質問はベクトルについてです。 私は次に機能ベクトルへの参照をパラメータとして渡す

void bla(std::vector<int> &arr) 
    { 
    } 

を持っている場合、それは、ベクターへの参照を渡す必要がありますが、それは配列と同じように起こるのでしょうか? ベクトルは配列を使って実装されているので、私がリファレンスを渡すと、最初の要素のアドレスが単に渡されるということです。それは正しいかどうか?

また、ベクターとして渡すとどうなりますか?スタックにコピーを作成しますか? ありがとう

答えて

0

  • void foo(Bar b)からbコピーまたは元Barであり、値渡し。
  • void foo(Bar& b) - 参考のため、元のBarからbまで変更することができます。
  • void foo(Bar* b) - (bがnullでない限り)ポインタ渡し、あなたがbて元Barを変更することができます。
  • void foo(const Bar& b) - bは元のBarですが、fooの範囲で変更することはできません。
  • void foo(const Bar* b) - ポインタをconstに渡すと、bは元のBarへのポインタですが、fooの範囲では変更できません。
  • void foo(Bar* const b) - CONSTポインタを通過、bは元Barへのポインタであり、そして(bがnullでない限り)元Barを変更することができるが、何bポイントに変更することはできません。
  • void foo(const Bar* const b) - constポインタをconstに渡すと、元のBarを変更することはできません。の範囲をfooの範囲に変更することはできません。
0

参照によってベクターを渡すと、配列全体が渡され、編集することができます。最初の要素のアドレスを渡しません。それ以外の場合は、参照渡しをしないと、配列のコピーだけが作成されます。

出典:学校でのコーディング経験(これが間違っている場合は編集してください)。

5

std::vectorは、生のCスタイルの配列よりも非常に異なるあるので、あなたは、参照によって誰std::vectorを渡すとstd::vectorの最初の項目のアドレスが関数に渡されているものであると言うことができます。

std::vectorの中には、 "生のCスタイルの配列"よりも論理があります。

ベクトルの最初の項目のアドレスを希望する場合は、&v[0]またはv.data()を使用して取得できます。

ベクトルを値で渡すと元のベクトルのコピーが得られます。そしてあなたの関数内でそのコピーにあなたが行うすべての変更は、ではなく、がオリジナルに反映されています。一般に

+0

いいえ、ベクトルを参照渡しすると、いくつかのアドレスを渡してから、ハードウェアがちょうど1つのアドレスだけを使ってベクターを取得できますか? – Andrey

関連する問題