在C ++中查找向量的奇数位置的最大值

时间:2016-03-17 16:31:09

标签: c++ vector max min

我试图在C ++中找到向量的奇数(或偶数)位置的最大元素。

例如,使用下面的代码,我可以找到向量/** * Sets the margins. * * @param marginLeft the margin on the left * @param marginRight the margin on the right * @param marginTop the margin on the top * @param marginBottom the margin on the bottom * @return a <CODE>boolean</CODE> */ public boolean setMargins(float marginLeft, float marginRight, float marginTop, float marginBottom) 的最大元素:

timer_table

有没有办法获得向量的奇数位置的最大值?例如,如果timer_table[ii]= *std::max_element(timer_table.begin(), timer_table.end()); ,我想得到22或100(偶数或奇数)。

2 个答案:

答案 0 :(得分:0)

max_element()的复杂性是O(n),因此您可以自己编写O(n)for循环。使用适当的条件,同时使用i+=2增加索引变量(i=0)以进行偶数索引和i=1奇数索引的初始化。

虽然这很容易,但为了完整起见,我正在添加代码。

#include "iostream"
#include "vector"
using namespace std;

vector <int> :: iterator odd_max (vector <int> &x)
{
    vector <int> :: iterator it = x.begin() + 1;
    for (vector <int> :: iterator i = it + 2; i < x.end(); i+=2)
        if (*i > *it) it = i;
    return it;
}

vector <int> :: iterator even_max (vector <int> &x)
{
    vector <int> :: iterator it = x.begin();
    for (vector <int> :: iterator i = it + 2; i < x.end(); i+=2)
        if (*i > *it) it = i;
    return it;
}


int main()
{
    vector <int> timer_table = {1, 22, 6, 3, 100, 2};
    cout << *odd_max(timer_table) << '\n';
    cout << *even_max(timer_table) << '\n';
}

答案 1 :(得分:0)

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;

cpp.sh/7yvcx

跑步