std::transformとstd::for_eachの違いは何ですか?
2023-10-04 15:52:08
質問
どちらも要素の範囲に関数を適用するために使用することができます。
高いレベルでは
-
std::for_each
は、関数の戻り値を無視し、実行順序を保証します。 実行順序を保証します。 -
std::transform
はイテレータに戻り値を代入し、実行順序を保証しません。 実行順序を保証するものではありません。
どのような場合に、一方と他方を使い分けるのがよいのでしょうか?また、微妙な注意点はありますか?
どのように解決するのですか?
std::transform
と同じです。
map
. このアイデアは、2つのイテレータの間にある各要素に関数を適用し、その関数の適用結果の要素で構成される別のコンテナを取得することです。例えば,オブジェクトのデータメンバを新しいコンテナに投影するような使い方が考えられます.以下では
std::transform
のコンテナを変換するために使用されます。
std::string
のコンテナで
std::size_t
s.
std::vector<std::string> names = {"hi", "test", "foo"};
std::vector<std::size_t> name_sizes;
std::transform(names.begin(), names.end(), std::back_inserter(name_sizes), [](const std::string& name) { return name.size();});
一方
std::for_each
を単独で副作用のために実行します。つまり
std::for_each
は単純な範囲ベースの
for
ループに似ています。
文字列の例に戻ります。
std::for_each(name_sizes.begin(), name_sizes.end(), [](std::size_t name_size) {
std::cout << name_size << std::endl;
});
実際、C++11 以降では、同じことを範囲ベースの
for
ループを使用することで、より長い表記で同じことが実現できます。
for (std::size_t name_size: name_sizes) {
std::cout << name_size << std::endl;
}
関連
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C++11の'typedef'と'using'の違いは何ですか?
-
[解決済み】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-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む