0

我想char使用std::reverse()STL 算法中的函数来反转类型的二维数组。

#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] 中的char[5] 数组交换,这不是有效的C++。

但是,在 C++11 中,这确实可以按预期工作;不是因为您现在可以分配数组,而是因为std::swap获得了使其适用于数组的重载,有效地映射到std::swap_ranges. 但是您应该意识到这不仅仅是交换指针,而是单独交换数组类型(在您的情况下为字符)。

于 2012-06-16T00:00:48.887 回答