c ++ [] с вектором <vector <int>> - PullRequest
0 голосов
/ 02 июня 2018

У меня проблемы с доступом к элементам последнего вектора, содержащегося в векторе.

std::vector<std::vector<int>> vec1 = {{1,2,3}, {1,2,3}, {1,2,3}, {1,2,3}}.

Как получить второй элемент последнего элемента vec1?
Iпопробуйте:

  • vec1.[vec1.end() - 1][1]
  • vec1.[vec1.at(vec1.end()) - 1][1]

Как использовать при 2 измерениях?

пожалуйстаобъяснить использование [] и .at().

Ответы [ 2 ]

0 голосов
/ 02 июня 2018
void test()
{
    std::vector<std::vector<int>> vec1 = { { 1,2,3 },{ 1,2,3 },{ 1,2,3 },{ 1,2,3 } };
    int last_sec = *(++(--vec1.end())->begin());
}

для доступа ко второму элементу последнего элемента vec1, вы можете использовать --end (), чтобы получить последний итератор vec1, а ++ (it-> begin ()) вернуть второй итератороб этом, то разыменование, чтобы получить элемент.

std :: vector: operator [] тип возврата и без проверки границ.
std :: vector :: at () Возвращает ссылку на элементв указанном месте пос, с проверкой границ.

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

С back вы можете просто сделать:

vec1.back()[1];

вместо vec1.[vec1.size() - 1][1].

или даже путь итератора:

(*(vec1.end() - 1))[1]; // or (vec1.end() - 1)->at(1);

объясните, пожалуйста, использование [] и .at().

at выполняет проверку с привязкой вопреки operator [] или back.

Так что для проверки с привязкой, используйте at вместо вышеуказанной альтернативы:

vec1.at(vec1.size() - 1).at(1); // std::out_of_range thrown is case of out of bound access.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...