[解決済み] プレーン配列の範囲指定はどのように行われるのですか?
2023-04-05 23:42:35
質問
C++11 では、範囲ベースの
for
として機能します。
foreach
のような役割を果たします。これはC言語のプレーンな配列でも動作します。
int numbers[] = { 1, 2, 3, 4, 5 };
for (int& n : numbers) {
n *= 2;
}
停止するタイミングはどのように知るのでしょうか?と同じスコープで宣言された静的配列に対してのみ動作するのでしょうか?
for
が使われているのと同じスコープで宣言された静的配列にしか使えないのですか?この
for
を動的配列と一緒に使うのですか?
どのように解決するのですか?
型が配列であれば、どのような式でも動作します。例えば
int (*arraypointer)[4] = new int[1][4]{{1, 2, 3, 4}};
for(int &n : *arraypointer)
n *= 2;
delete [] arraypointer;
の右側に渡される式の型は、より詳細な説明のために
:
の右側に渡された式の型が配列型である場合、ループの反復は
ptr
から
ptr + size
(
ptr
は配列の最初の要素を指している。
size
は配列の要素数)。
これは、ユーザー定義型とは対照的で、ユーザー定義型は
begin
と
end
は、クラスオブジェクトを渡した場合はメンバとして、 また、(そのように呼ばれるメンバがない場合は)メンバでない関数を渡した場合はメンバとして 扱われます。これらの関数は、beginとendイテレータ(それぞれ最後の要素の直後とシーケンスの開始点を指す)を生成します。
この質問 は、なぜそのような違いがあるのかを明らかにします。
関連
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] JavaScriptには、与えられた範囲内の範囲を生成する "range() "のようなメソッドがありますか?
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み】JavaScriptで2つの配列を結合し、項目の重複を排除する方法
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
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 実装 サイバーパンク風ボタン