Доступ к вектору в классе - PullRequest
0 голосов
/ 02 июня 2011

Если у меня есть личный член вектора в классе, каков наилучший способ получить к нему доступ?Например, возьмите следующий простой класс

class MCL{
    private:
    std::vector my_vec;

    public:
    // Include constructor here and other member functions
}

Какой лучший способ получить доступ к my_vec?В частности, я хотел бы использовать функцию получения для доступа к нему.

Ответы [ 3 ]

2 голосов
/ 02 июня 2011

вернуть его по константной ссылке или просто по ссылке, если вы хотите разрешить изменение.

const std::vector<T> & getVector() const
{
    return vector;
}

использование:

const std::vector<T> &v = myClass.getVector();
0 голосов
/ 02 июня 2011

В зависимости от семантики вашего класса, вы можете реализовать оператор []:

T& operator[](int i) {
  return my_vec[i];
}

Таким образом, вы можете [] получить доступ к содержимому вашего вектора:

MCL a;
a[0] = 3;
std::cout << a[0] << std::endl;

Обратите внимание, что это может считаться злоупотреблением оператором [] или плохой практикой, но разработчик должен решить, соответствует ли эта конструкция классу, в зависимости от его семантики.Решение не предоставляет способ вставки или удаления элементов из вектора, просто доступ к уже существующим элементам.Возможно, вы захотите добавить другие методы, чтобы сделать это или реализовать что-то вроде:

T& operator[](int i) {
  if(my_vec.size() < i)
    my_vec.resize(i+1);
  return my_vec[i];
}

Опять же, это зависит от семантики вашего класса и модели его использования.Это может быть или не быть хорошей идеей.

0 голосов
/ 02 июня 2011

Создать публичную функцию с именем

std: vector getMyVec () {return my_vec;}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...