Ответ не ни один из выше.
Нет такой вещи, как 2D vector
. Все vectors
являются 1D, но могут содержать объекты, которые придают внешний вид дополнительным размерам.
Рассмотрите вариант 5. Это vector
, который содержит другие vector
s и, конечно же, может выглядеть 2D при использовании. Наружный vector
поставляет один размер, а содержащий vector
s - другой. Но это не 2D vector
. Это vector
от vectors
.
std::vector <int,int> v1;
Неверный синтаксис. Это указывает, что распределитель имеет тип int
и, вероятно, приводит к нескольким страницам сообщений об ошибке bizarro.
std::vector <pair<int,int>> v2;
обеспечит матрицу N × 2, но доступ к парам является громоздким v2[n].first
? Тьфу.
std::vector <int> v(10);
Это 1D вектор, но его можно рассматривать как матрицу 5x2, если вы готовы сделать математику самостоятельно: v[row*2+column]
struct node{
int a,b;
}
std::vector<node> v4;
Почти идентичный вариант 2. v4[n].a
не плохо , но может быть лучше.
std::vector< vector<int> > v5;
Обложка выше. Это имеет преимущество, но допускает непрямоугольную форму и имеет ужасную производительность кеша, потому что каждый из множества vector
s - это собственный зверь с собственной памятью, и эта память может быть разбросана по всему хранилищу. Читайте о пространственной местности, чтобы понять, почему это плохо.
I шаг Вариант 6
std::vector<int[2]> v6;
Это все смежное хранение и выглядит как N х 2 матрицы: v6[row][column]
.
Они все технически "2D". Все зависит от ваших потребностей. –
Первый, насколько мне известно, не является даже юридическим синтаксисом. – ArchbishopOfBanterbury
Похоже, вы не играете, когда используете 'int' в качестве распределителя. – LogicStuff