int *arr = (int*) malloc(100*sizeof(int));
int *arr_copy = (int*) malloc(100*sizeof(int));
srand(123456789L);
for( int i = 0; i < 100; i++) {
arr[i] = rand();
arr_copy[i] = arr[i];
}
// ------ do stuff with arr ------
// reset arr...
std::copy(arr_copy, arr_copy+100, arr);
これをコンパイルしている間、私はこの警告を受け取りますstd::copy()
:
c:\program files (x86)\microsoft visual studio 10.0\vc\include\xutility(2227):
warning C4996: 'std::_Copy_impl': Function call with parameters that may be
unsafe - this call relies on the caller to check that the passed values are
correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See
documentation on how to use Visual C++ 'Checked Iterators'
警告を無効化/無視する方法は知っていますが、チェックされていないポインターから「チェックされたイテレーター」を作成するための簡単なワンライナーソリューションはありますか?次のようなもの(coutはint *のようなチェックされていないポインタではなく、たとえば):
ostream_iterator<int> out(cout," ");
std::copy(arr_copy, arr_copy+numElements, out);
まったく新しい専門を書きたくありませんclass my_int_arr_output_iterator : iterator...
。しかし、既存のイテレータの1つを使用できますか?
- -編集 - -
STLコンテナの代わりにc-style-arraysとmallocを使用することについては多くの質問があるので、さまざまなソートアルゴリズムのパフォーマンスとメモリ使用量をテストするための小さなプログラムを作成しているとだけ言っておきます。上記のコードスニペットは、問題に固有の特殊なバージョンです(元のコードは、複数のメソッドを持つテンプレートクラスであり、さまざまなタイプの配列内のさまざまな数の要素に対して1つのアルゴリズムをテストします)。
言い換えれば、STLコンテナー(vector)とそのイテレーター(vector :: begin / end)を使用してこれを行う方法を知っています。私が知らなかったのは私が尋ねたことです。
でもありがとう、うまくいけば、私でなければ誰か他の人が答えから利益を得るでしょう。