ベクトルポインタをデリファレンスして要素にアクセスする
2023-10-12 07:38:55
質問
C++でベクトルへのポインタを持っている場合。
vector<int>* vecPtr;
そして、ベクトルの要素にアクセスしたいのですが、その場合、ベクトルの参照を解除することで可能です。
int a = (*vecPtr)[i];
しかし、このデリファレンスは実際にスタック上にvectorのコピーを作成するのでしょうか? 例えば、vectorが10000intを格納しているとすると、vecPtrをデリファレンスすることによって10000intがコピーされるのでしょうか?
ありがとうございます。
どのように解決するのですか?
10000
int
はコピーされません。デリファレンスは非常に安価です。
明確にするために、次のように書き換えることができます。
int a = (*vecPtr)[i];
として
vector<int>& vecRef = *vecPtr; // vector is not copied here
int a = vecRef[i];
に格納されているデータが全部消えてしまうのが心配な場合は、このように
vector
に格納されているデータ全体がスタック上に配置されることを恐れて
vector<int>*
の代わりに
vector<int>
を使用すると、これを避けることができます。
実際には、スタックに固定量のメモリ (実装に依存する約 16-20 バイト) が使われるだけであり、これは
vector
.
また
vector
はそれ自身がメモリを確保し、ヒープ上に要素を格納します。
関連
-
[解決済み] テスト
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み] ベクトルが与えられた要素を含むかどうかをテストする
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] std::vector にある項目が存在するかどうかを調べるには?
-
[解決済み] std::vector<> からインデックスで要素を消すにはどうしたらいいですか?
-
[解決済み] ポインタの「デリファレンス」とはどういう意味ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】coutはstdのメンバではない
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み】デバッグアサーションに失敗しました