20

C++ 配列をクリア/空にするにはどうすればよいですか? Theresarray::fillですが、C++11 のみのように見えますか? VC++ 2010 を使用しています。空にする (すべて 0 にリセットする) にはどうすればよいですか?

4

7 に答える 7

31
std::fill_n(array, elementCount, 0);

array通常の配列であると仮定します(例int[]

于 2012-11-09T12:37:43.763 に答える
11

から暗黙的に変換可能な型の要素を持つ、aサイズがの C スタイルの配列を想定すると、次の例では、すべての要素を から構築された値に設定します。N00

std::fill(a, a+N, 0);

これは「空にする」または「クリアする」と同じではないことに注意してください。

編集:ジェームズカンゼの提案に従って、C++ 11では、より慣用的な代替手段を使用できます

std::fill( std::begin( a ), std::end( a ), 0 );

C++11 がない場合は、次の方法で独自のソリューションを展開できます。

template <typename T, std::size_t N> T* end_(T(&arr)[N]) { return arr + N; }

template <typename T, std::size_t N> T* begin_(T(&arr)[N]) { return arr; }

std::fill( begin_( a ), end_( a ), 0 );
于 2012-11-09T12:42:11.630 に答える
7
std::fill(a.begin(),a.end(),0);
于 2012-11-09T12:38:33.550 に答える
0

for (auto& a : SomeArray) a = 0;

于 2021-04-19T15:34:39.770 に答える
-1

ねえ、そのような操作を処理する最速の方法は、メモリを memset() することです。

例-

memset(&myPage.pageArray[0][0], 0, sizeof(myPage.pageArray));

同様の C++ の方法は、std::fill を使用することです。

char *begin = myPage.pageArray[0][0];
char *end = begin + sizeof(myPage.pageArray);
std::fill(begin, end, 0);
于 2012-11-09T12:43:08.450 に答える
-3

0までの場合は、次を使用できますmemset

int* a = new int[6];

memset(a, 0, 6*sizeof(int));
于 2012-11-09T12:37:52.663 に答える