C++ 如何在C+中使用计数排序方法实现+;
我现在使用计数排序方法进行排序,有关此方法的详细说明,请参阅 代码如下:C++ 如何在C+中使用计数排序方法实现+;,c++,visual-studio-2010,C++,Visual Studio 2010,我现在使用计数排序方法进行排序,有关此方法的详细说明,请参阅 代码如下: #include <iterator> #include <limits> template <typename iterator> void counting_sort(iterator const &begin, iterator const &end) { typedef std::iterator_trai
#include <iterator>
#include <limits>
template <typename iterator>
void counting_sort(iterator const &begin, iterator const &end)
{
typedef std::iterator_traits<iterator>::value_type T;
T max = std::numeric_limits<T>::max();
T freq[max+1] = {0};
iterator it;
T c;
for (it = begin; it < end; ++it) {
freq[*it] += 1;
}
for (c = 0, it = begin; c < max; ++c)
while (freq[c]-- > 0) {
*it++ = c;
}
}
while (freq[c]-- > 0) {
*it++ = c;
}
}
error C2057: expected constant expression
error C2466: cannot allocate an array of constant size 0
关于如何使用代码有什么想法吗?谢谢在C++中(不是OD C),你不能声明一个长度可变的数组。如果max
是一个常数,那么您的表达式将是正确的。决定将freq
声明为std::vector
std::vector< T > freq( (size_t)max + 1, 0 );
<>在C++中(不是ODC),不能声明一个长度可变的数组。如果max
是一个常数,那么您的表达式将是正确的。决定将freq
声明为std::vector
std::vector< T > freq( (size_t)max + 1, 0 );
<>在C++中(不是ODC),不能声明一个长度可变的数组。如果max
是一个常数,那么您的表达式将是正确的。决定将freq
声明为std::vector
std::vector< T > freq( (size_t)max + 1, 0 );
<>在C++中(不是ODC),不能声明一个长度可变的数组。如果max
是一个常数,那么您的表达式将是正确的。决定将freq
声明为std::vector
std::vector< T > freq( (size_t)max + 1, 0 );
取类型的max
tmax=std::numeric_limits::max()代码>并在下一行添加1,对我来说就像是溢出代码>并在下一行添加1,对我来说就像是溢出代码>并在下一行添加1,对我来说就像是溢出代码>并在下一行添加1,对我来说似乎是溢出。