我试图在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(偶数或奇数)。
答案 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;
跑步