Запрос о свойствах векторов в C ++ - PullRequest
1 голос
/ 02 октября 2011

Я новичок и только что натолкнулся на концепцию векторов в C ++.У меня есть несколько вопросов по этому поводу 1. Существует ли концепция двумерных векторов в C ++?если да, то как мне объявить соответствующую 2-D матрицу a [n] [m]?Здесь n и m переменные.2. Как векторы передаются в качестве аргументов в функции?По умолчанию они передаются по ссылке или по значению?3. Есть ли какие-либо преимущества в производительности векторов над массивами в C ++?

Ответы [ 3 ]

1 голос
/ 02 октября 2011

1 - Нет реальной концепции размеров как таковой. Но вы можете создавать «вложенные» типы. Например:

std::vector <int> intVec;
std::vector < std::vector <int> > doubleIntVec;

Здесь intVec можно сравнить с одномерным вектором, doubleIntVec - с двойным измерением и т. Д. Типы не обязательно должны быть одинаковыми, например, вы можете сделать std::vector < std::vector <char> > doubleIntVec, поэтому термин «измерение» здесь не совсем правильный.

2 - Как и у любого другого типа, нет особой обработки векторов.

3 - Да, например, если вам нужно изменить их размер, но вы можете реализовать массивы, чтобы они вели себя аналогично. Помимо этого преимуществом является стандартизация, встроенное управление памятью, дополнительные методы и различные алгоритмы STL, которые можно запускать на векторах (будучи стандартным контейнером).

1 голос
/ 02 октября 2011

В C ++ нет двумерных векторов, для создания матрицы можно использовать векторы векторов.

using namespace std;
int m, n;
// ...
vector<vector<int> > v(n);
for (int y = 0; y < n; y++)
    v[n].resize(m);
// ...

Вычислительные библиотеки не будут реализовывать их таким образом.

Чтобы передать вектор по ссылке на функцию, используйте: функция void (вектор & v); Если пропустить &, вектор будет скопирован во время вызова функции.

Векторы имеют ту же производительность, что и массивы C, но гораздо более практичны в использовании. Не нужно вручную управлять памятью, а векторный размер всегда доступен. У вас также есть автоматическое копирование и гарантии непрерывности значений (необработанные данные могут быть доступны с помощью vector :: data ()

0 голосов
/ 02 октября 2011

вектор в C ++ - это просто контейнер последовательности.Таким образом, можно использовать его для хранения 2D-массива.

  1. Использование std::vector <std::vector<int>>
  2. Это зависит от цели
  3. Не по производительности, но в отличие от массива, std :: vector можно наращивать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...