Доступ к последнему элементу вектора векторов в c++

Есть вектор векторов vector<vector<double>> vec. Он заполняется в методе. Поэтому размерность внутренних векторов бывает разная. Например {{1,2,3},{4,5}, {5,6,7}}. Мне нужно получить последний элемент последнего вектора. Я хотел так:

 double a = vec.back().back();

Компилятор не ругается, но программа на этой строке вылетает. Как можно получить этот элемент?


Ответы (2 шт):

Автор решения: gbg

Вам еще надо бы учесть, что вектор может быть пустым - тогда программа будет вылетать на такой строке (хоть формально, она и верная).

Можно поступить так:

if( !vec.empty() && !vec.back().empty() )
{
    double a = vec.back().back();
}
→ Ссылка
Автор решения: Bloody.cpp

В дополнение к ответу gbg: Я бы вынес всё это в функцию и добавил бы исключение при неправильном параметре.

#include <iostream>
#include <vector>
#include <exception>

using namespace std;

double get_last_of_last(vector<vector<double>>& vec)
{
    if (vec.empty() || vec.back().empty())
    {
        throw runtime_error("unvalid parameter");
    }
    return vec.back().back();
}

int main()
{
    vector<vector<double>> vec = { {1, 2, 3}, {2, 5, 6, 7}, {1, 5, 2, 6, 8} };
    cout << get_last_of_last(vec) << endl;
    system("pause");
    return 1;
}
→ Ссылка