我想在STL算法中使用char
函数反转类型为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来编译我的代码。
答案 0 :(得分:3)
问题的根源是无法将数组分配给彼此。让我们考虑如何实现std::reverse
:
template<class BidirectionalIterator>
void reverse(BidirectionalIterator first, BidirectionalIterator last)
{
while ((first != last) && (first != --last)) {
std::swap(*first++, *last);
}
}
和std::swap
需要能够分配你给它的任何参数,以便交换它们。在你的情况下,你有一个数组数组;所以它试图将数组[0]的char [5]数组与数组[10]的数组交换,这是无效的C ++。
但是,在C ++ 11中这确实可以正常工作;不是因为您现在可以分配数组,而是因为std::swap
已经获得了一个重载,使其适用于数组,有效地映射到std::swap_ranges
。但你应该意识到这不仅仅是交换指针,而是单独交换数组类型(在你的情况下是chars)。