表題の通りなのですが、次のようなループのカウンタを呼び出される
配列に入れるにはどうしたらいいのでしょうか?
const int MAX = 100;
int Array[MAX] = {0};
/*
//これと同じことをしたいのですが。。。。
for( int i=0; i<MAX; ++i )
Array[i] = i;
*/
for_each(Array, Array+MAX, /*ここはどうするのでしょう?*/);
調べてみましたが、めぼしいものがみつかりません。
もともと無理なものなのでしょうか?
ご教授お願いします。環境はVC8です。
No.1ベストアンサー
- 回答日時:
こんばんは。
関数オブジェクトが一番楽です。
struct CCounter
{
CCounter() : m_iRef(0)
{}
void operator()(int& rVal)
{
rVal = m_iRef++;
}
private:
int m_iRef;
};
static void Print(int iVal)
{
cout << iVal << endl;
}
int main(void)
{
const int MAX = 100;
int Array[MAX] = {0};
std::for_each(Array, Array+MAX, CCounter());
std::for_each(Array, Array+MAX, &::Print);
return 0;
}
早速の回答ありがとうございます。
やはり、明示的に引数にループカウンタを入れるのは無理なので
自分で、カウンタを模したものを、入れるしかないのですね。。。
No.2
- 回答日時:
VC++8に現物合わせするのであれば#1の回答で問題ありません。
しかし、(VC++の将来のバージョンを含めて)他の処理系との移植性を考える場合は適切とはいえません。
まず、for_eachはInputIteratorを要求しますので、その参照先を更新することはできません。更新が必要な場合は、generateなど、他のアルゴリズムを使用すべきです。
次に、状態を持つ関数オブジェクトは、アルゴリズム関数の中で複数回コピーされる可能性があることに注意しなければなりません。常に同じインスタンスを用いて処理できるのであればよいのですが、規格上そのような保証はありません。
また、for_eachの場合、範囲内の各要素に対して前から順に操作することが規定されていますが、generateなどではその規定がありません。すなわち、呼び出される順序に依存する関数オブジェクトは適切ではありません。
つまり、一般的には無理だと思います。
回答ありがとうございます。
その点はまさに、気になっていたことです!!
やはり現時点での間に合わせに過ぎないのですね。
配列のindexに依存するようなコードを書くのがもう時代遅れ
だということを暗に意味しているのでしょうかね?
No.3
- 回答日時:
> 配列のindexに依存するようなコードを書くのがもう時代遅れ
> だということを暗に意味しているのでしょうかね?
時代遅れということはないと思いますが、STLの方針には合わないということでしょう。
添え字を使う場合、配列、vector、deque、basic_stringなどは問題ないですが、listやsetなどでは無理があります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- Visual Basic(VBA) 型が一致しませんとエラー 6 2023/07/06 20:14
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# プログラミングを教えて欲しいです。 配列aは、int a[9]={7,6,12,8,3,5,10,9 4 2022/12/19 23:27
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語
-
関数から配列を返すには?
-
100の階乗のプログラムって
-
ループカウンタを使用せず、配...
-
要素数・要素の値が未定の配列...
-
コンボボックスでデフォルト値...
-
配列のアドレス部
-
RAW画像高速表示について
-
2番目の最大値を求める
-
define で 配列
-
配列の要素数に変数を入れたい...
-
C言語の課題が出たのですが自力...
-
背景差分法における正規化距離
-
.NET C++で、構造体の配列をnew...
-
配列の配列をmemcpyやmemcmpし...
-
[C++/CLI]マネージコードで配列...
-
円周率を求めるプログラム
-
シマウマの模様を変えるプログラム
-
C#で構造体の配列を持った構造...
-
C言語についてです 5人のテスト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
define で 配列
-
c言語
-
C#で構造体の配列を持った構造...
-
構造体のextern方法
-
C言語において、 配列要素をひ...
-
C#でのフィボナッチ数列
-
C言語の2次元配列 容量が大き...
-
C#で配列が空かを判定するには?
-
配列のアドレス部
-
char型配列をint型に代入するには
-
2番目の最大値を求める
-
C言語の課題が出たのですが自力...
-
C言語についてです 5人のテスト...
-
C言語から質問です。
-
C言語 ファイルの指定された行...
-
c言語 構造体
-
コンボボックスでデフォルト値...
-
MFCのCArrayを使った二次元配列
おすすめ情報