Доступ к конкретному элементу в std :: deque - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно получить доступ к элементу в определенной позиции в очереди "queArr".Из этого элемента, который является объектом класса "plane", мне нужно вызвать функцию-член getTime, которая возвращает приватное время члена.Проблема в том, что я не знаю, как получить доступ к элементу, так как он может находиться где угодно в очереди.

Я попытался использовать оператор [] и функцию que.at (), но оба безуспешно.Это единственные варианты, которые я мог найти в определении deque (https://en.cppreference.com/w/cpp/container/deque), которое казалось уместным.

Это текущий код. Он захватывает позицию элемента с наименьшим количеством топлива (доступ черезgetFuel ()) и затем удаляет его с помощью .erease (pos), используя позицию, добавленную к итератору, указывающему на первый элемент Ques. Перед этим, в месте комментария, мне нужно получить доступ к функции-члену 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 Ответ

1 голос
/ 10 апреля 2019

А как насчет использования функции 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 .

...