Доступ к последнему элементу вектора векторов в 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;
}