Например, я создаю 2D вектор (1000×3) как:
vector<vector<float>> Vector (1000, vector<float>(3))
Затем функция сохраняет трехмерные точки в векторе (не обязательно 1000 точек, но меньше 1000). Как мне получить индекс последней строки в векторе, который я создал?
Я выяснил метод, называемый «end», определенный в векторном классе, но не знаю синтаксис.
Также некоторые могут сказать, что я могу проследить индекс последней точки, сохраненной в векторе, например:
Vector[i][j] = value;
Но мне нужны эти данные в других функциях, поэтому возвращение этого индекса не кажется мне хорошим вариантом.
Вы не должны инициализировать его с 1000 элементов. Просто оставьте поле пустым и используйте Vector.push (…) для добавления новых точек, вектор будет расти автоматически.
Тогда последний индекс:
Vector.size() - 1
Или, если вы настаиваете на этом, вы можете поместить его в класс и добавить член для хранения размера.
struct PointVector {
vector<array<float, 3>> Vector;
int size;
PointVector() : Vector(1000, {0, 0, 0}), size(0) { }
};
Так как каждая строка является трехмерной точкой и, следовательно, будет иметь 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-й точки (даже если вы еще не присвоили ему никаких полезных значений).