我需要访问双端队列“ queArr”中特定位置的元素。从这个元素,它是“ plane”类的对象,我需要调用成员函数getTime,该函数返回私有成员时间。问题是我不知道如何访问元素,因为它可能在que中的任何地方。
我尝试使用[]运算符和que.at()函数,但均未成功。这些是我在双端队列(https://en.cppreference.com/w/cpp/container/deque)的定义中唯一可以找到的,可能相关的选项。
这是当前代码。它获取燃料最少的元素(通过getFuel()访问)的位置,然后使用添加到指向第一个元素的迭代器的位置通过.erease(pos)删除它。在此之前,在注释处,我需要访问此元素的成员函数getTime并将其添加到变量totalArr中。如何访问它是我当前的问题。
//namespace std is being used
landingDelay+=landingTime;
cout<<"A plane has started landing \n";
int quePos=0;
int ref=queArr.front().getFuel();
for(int j=0; j<queArr.size(); j++)
{
if(queArr.at(j).getFuel()<ref)
{
ref=queArr.at(j).getFuel();
quePos=j;
}
}
it=queArr.begin();
it+=quePos;
//I was thinking something here
queArr.erase(it);
任何帮助将不胜感激:)
答案 0 :(得分:1)
使用STL函数std::min_element()
而不是手动滚动相同功能怎么办:
const auto minFuel = min_element( begin( queArr ), end( queArr ),
[]( const auto& a, const auto& b) { return a.getFuel() < b.getFuel(); } );
if( minFuel != end( queArr ) )
{
cout << minFuel->getTime();
}
这是一个完整的工作示例:
#include <algorithm>
#include <iostream>
#include <deque>
using namespace std;
struct Plane
{
Plane( int fuel ) : _fuel{ fuel } {}
int getFuel() const { return _fuel; }
int getTime() const { return _fuel * 2; }
private:
int _fuel;
};
int main()
{
const auto queArr = deque<Plane>{ 1, 2, 3, 4, 5, -1, 10 };
const auto minFuel = min_element( begin( queArr ), end( queArr ),
[]( const auto& a, const auto& b) { return a.getFuel() < b.getFuel(); } );
if( minFuel != end( queArr ) )
{
cout << minFuel->getTime();
}
}
输出-2
。在 Coliru 上实时观看。