访问std :: deque中的特定元素

时间:2019-04-10 19:32:36

标签: c++ deque

我需要访问双端队列“ 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);

任何帮助将不胜感激:)

1 个答案:

答案 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 上实时观看。