我正在尝试编译上面的代码而且我得到了:c ++ 98模式中不允许使用基于范围的for循环
int max_even = timer_table[0];
int max_odd = timer_table[1];
bool even = true;
for( int v : timer_table )
{
if( even ) {
if( v > max_even )
max_even = v;
} else {
if( v > max_odd )
max_odd = v;
}
even = ! even;
}
std::cout << "max even " << max_even << " max odd " << max_odd << std::endl;
如何在c++98
上编译它?
答案 0 :(得分:3)
看起来你的编译器试图在C++98
中编译,默认情况下它不支持基于范围的for循环(参见下面的el.pescado&#39;评论)。您有两种选择:
使用简单的for循环:
int max_even = timer_table[0];
int max_odd = timer_table[1];
bool even = true;
for( int i = 2 ; i < table_length; i++ )
{
if( even ) {
if( timer_table[i] > max_even )
max_even = timer_table[i];
} else {
if( timer_table[i] > max_odd )
max_odd = timer_table[i];
}
even = ! even;
}
std::cout << "max even " << max_even << " max odd " << max_odd << std::endl;
答案 1 :(得分:2)
我们假设数组timer_table
有N
个元素。
在这种情况下,你可以写
int max_even = timer_table[0];
int max_odd = timer_table[1];
bool even = true;
for( const int *p = timer_table + 2; p != timer_table + N; ++p )
{
if( even ) {
if( max_even < *p )
max_even = *p;
} else {
if( max_odd < *p )
max_odd = *p;
}
even = !even;
}
std::cout << "max even " << max_even << " max odd " << max_odd << std::endl;
实际上,您可以使用任何类型的循环来遍历数组的所有元素。:)
答案 2 :(得分:1)
第一种方法是用常规for
循环替换它。要获得更精确的答案,我们需要知道timer_table
如何声明或我们可以在何处获得它的大小。
int max_even = timer_table[0];
int max_odd = timer_table[1];
bool even = true;
int timer_table_size = sizeof(timer_table)/sizeof(timer_table[0]);
for( int i = 0, v = timer_table[0]; i < timer_table_size; ++i, v = (i<timer_table_size)?timer_table[i]:0)
{
if( even ) {
if( v > max_even )
max_even = v;
} else {
if( v > max_odd )
max_odd = v;
}
even = ! even;
}
std::cout << "max even " << max_even << " max odd " << max_odd << std::endl;
答案 3 :(得分:1)
要使代码在C ++ 98中工作,您应该使用迭代器方法:
for( std::vector<int>::iterator i = timer_table.begin(); i != timer_table.end(); ++i)
{
int v = *i;
...
或者如果它是一个普通的数组:
for(int *i = timer_table; i < sizeof(timer_table)/(sizeof(timer_table[0]); ++i)
{
int v = *i;
...