C ++ 98中基于范围的循环和向量

时间:2016-03-21 12:13:22

标签: c++ for-loop vector

我正在尝试编译上面的代码而且我得到了: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上编译它?

4 个答案:

答案 0 :(得分:3)

看起来你的编译器试图在C++98中编译,默认情况下它不支持基于范围的for循环(参见下面的el.pescado&#39;评论)。您有两种选择:

  1. 将编译器设置为使用C ++ 11
  2. 使用简单的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_tableN个元素。

在这种情况下,你可以写

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;
    ...