Возвращает конечный индекс 2D вектора

Например, я создаю 2D вектор (1000×3) как:

vector<vector<float>> Vector (1000, vector<float>(3))

Затем функция сохраняет трехмерные точки в векторе (не обязательно 1000 точек, но меньше 1000). Как мне получить индекс последней строки в векторе, который я создал?

Я выяснил метод, называемый «end», определенный в векторном классе, но не знаю синтаксис.

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

Vector[i][j] = value;

Но мне нужны эти данные в других функциях, поэтому возвращение этого индекса не кажется мне хорошим вариантом.

0

Решение

Вы не должны инициализировать его с 1000 элементов. Просто оставьте поле пустым и используйте Vector.push (…) для добавления новых точек, вектор будет расти автоматически.

Тогда последний индекс:

Vector.size() - 1

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

struct PointVector {
vector<array<float, 3>> Vector;
int size;
PointVector() : Vector(1000, {0, 0, 0}), size(0) { }
};
1

Другие решения

Так как каждая строка является трехмерной точкой и, следовательно, будет иметь 3 элемента, std::vector не подходящий тип Я бы, возможно, использовал std::array<float, 3> или struct с членами x, y, а также z для внутреннего типа.

Кажется, что вы на самом деле не хотите 1000 точек в вашем векторе. Может быть, вы делаете это, чтобы избежать перераспределения позже? В этом случае вы должны использовать Vector.reserve(1000);, Это зарезервирует память для точек, фактически не добавляя их. Затем вы можете добавить свои очки, используя emplace_back, push_back или любой другой механизм.

Затем, чтобы получить итератор до последней точки в векторе, вы можете сделать std::end(Vector) - 1 или же Vector.end() - 1, Если бы вы сохранили его таким, каким он был, где в векторе всегда было 1000 точек, это дало бы вам итератор до 1000-й точки (даже если вы еще не присвоили ему никаких полезных значений).

1