[解決済み] vector::at vs. vector::operator[].
質問
私は、以下のことを知っています。
at()
よりも遅いです。
[]
のような類似の質問でも議論される境界チェックのためです。
C++のベクトルat/[]演算子の速度
または
::std::vector::at() vs operator[] << 驚きの結果!!!! 5〜10倍遅い/速い!
. の意味がわからないんだけど
at()
メソッドは何のためにあるのか理解できません。
このような単純なベクトルがあったとして
std::vector<int> v(10);
で、その要素にアクセスするために
at()
の代わりに
[]
というインデックスがある場合
i
で、それがベクタの境界内にあるかどうかわからない場合、強制的に
トライキャッチブロックで囲む
:
try
{
v.at(i) = 2;
}
catch (std::out_of_range& oor)
{
...
}
を使っても同じ動作になるのですが
size()
を使って、自分でインデックスをチェックすることで、同じ動作を得ることができます。
if (i < v.size())
v[i] = 2;
そこで質問なのですが
を使用する利点は何ですか?
ベクトル::at
以上
ベクトル::演算子[]
?
どのような場合に
ベクトル::at
よりも
ベクトル::サイズ
+
ベクトル::演算子[]
?
どのように解決するのですか?
例外として
vector::at()
が投げる例外は、実際にはすぐ周りのコードで捕捉されることを意図したものではありません。これらは主にコードのバグをキャッチするのに便利です。インデックスがユーザからの入力であるなどの理由で、実行時に境界チェックをする必要がある場合は、確かに
if
ステートメントを使うのがベストです。つまり、要約すると、コードを設計するときには
vector::at()
が例外を投げないように、そして、もし例外が起きてプログラムが中断したら、それはバグの兆候であるように。(ちょうど
assert()
)
関連
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】指定範囲内の乱数で配列を埋める(C++)
-
[解決済み] std::vectorをハードコードされた要素で初期化する最も簡単な方法は何ですか?
-
[解決済み] std::vector<> からインデックスで要素を消すにはどうしたらいいですか?
-
[解決済み] std::vector に対する反復処理: 符号なしインデックス変数と符号ありインデックス変数の比較
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない