0

STL アルゴリズムの関数をchar使用して、型の 2 次元配列を逆にしたいと考えています。std::reverse()

#include <iostream>
#include <algorithm>

int main()
{
    char array[10][5];

    initiate_array(array);              // this takes care of initializing array

    std::reverse(array, array + 10);    // <- error C2075

    return 0;
}

しかし、私はこのエラーを受け取り続けています:C2075: '_Tmp' : array initialization needs curly braces これまでに遭遇したことはありません!

MSVC++ 2008 を使用してコードをコンパイルします。

4

1 に答える 1

3

問題の根本は、配列を互いに割り当てることができないことです。std::reverse実装方法を考えてみましょう:

template<class BidirectionalIterator>
void reverse(BidirectionalIterator first, BidirectionalIterator last)
{
    while ((first != last) && (first != --last)) {
        std::swap(*first++, *last);
    }
}

std::swapそれらを交換するために、与えた引数を割り当てることができる必要があります。あなたの場合、配列の配列があります。そのため、array[0] の char[5] 配列を array[10] の配列と交換しようとしていますが、これは有効な C++ ではありません。

ただし、C++11 では、これは期待どおりに機能します。配列を代入できるようになったからではなくstd::swap、配列に対して機能するようにするオーバーロードが得られたため、効果的にstd::swap_ranges. ただし、これはポインターを交換するだけでなく、配列タイプを個別に交換していることに注意してください (この場合は chars)。

于 2012-06-16T00:00:48.887 に答える