Conselho sobre uma maneira melhor de estender o contêiner C ++ STL com métodos definidos pelo usuário

Eu herdei do contêiner C ++ STL e adicionei meus próprios métodos a ele. A lógica era tal que, para os clientes, pareceria uma lista regular, mas ainda existem métodos específicos de aplicativos que podem ser facilmente chamado

Isso funciona bem, mas eu li vários posts sobre não herdar do STL. Alguém pode fornecer um conselho concreto de como eu poderia escrever o código abaixo de uma maneira melhor?

class Item
{
  int a;
  int b;
  int c;

  int SpecialB()
  {
    return a * b + c;
  }
};

class ItemList : public std::vector<Item>
{
  int MaxA()
  {
    if( this->empty() )
      throw;

    int maxA = (*this)[0].a;

    for( int idx = 1; idx < this->size(); idx++ )
    {
      if( (*this)[idx].a > maxA )
      {
        maxA = (*this)[idx].a;
      }
    }
    return maxA;
  }

  int SpecialB()
  {
    if( this->empty() )
      throw;

    int specialB = (*this)[0].SpecialB();

    for( int idx = 1; idx < this->size(); idx++ )
    {
      if( (*this)[idx].SpecialB() < specialB )
      {
        specialB -= (*this)[idx].c;
      }
    }
    return specialB;
  }

  int AvgC()
  {
    if( this->empty() )
      throw;

    int cSum = 0;
    for( int idx = 0; idx < this->size(); idx++ )
    {
      cSum += (*this)[idx].c;
    }

    return cSum / this->size(); // average
  }
};

EDITA: Obrigado por várias respostas atenciosas. Em vez disso, criarei funções auxiliares e a partir de agora nunca mais herdarei dos contêineres ST

questionAnswers(8)

yourAnswerToTheQuestion