Натолкнулся на примерно следующую конструкцию (Каким-то чудом она долгое время использовалась только для случая, когда "все хорошо"):
const int maxSize = 8;
vector <SomeType> v[maxSize];
...
SomeFunction (&v[0][0]);
При этом функция SomeFunction принимает "двумерный массив" и имеет прототип:
SomeFunction(SomeType *);
У нее еще параметры размерности (скажем, vectorLength), но это не важно.
Никогда так не делайте!
Вектор - это не массив, а класс, который хранит в себе массив.
Более того, вектор часто выделяет больше памяти, чем требуется (для оптимизации времени работы), поэтому по адресу &SomeType[vectorLength] первый элемент второго вектора в массиве (v[1][0]) не будет лежать никогда.
const int maxSize = 8;
vector <SomeType> v[maxSize];
...
SomeFunction (&v[0][0]);
При этом функция SomeFunction принимает "двумерный массив" и имеет прототип:
SomeFunction(SomeType *);
У нее еще параметры размерности (скажем, vectorLength), но это не важно.
Никогда так не делайте!
Вектор - это не массив, а класс, который хранит в себе массив.
Более того, вектор часто выделяет больше памяти, чем требуется (для оптимизации времени работы), поэтому по адресу &SomeType[vectorLength] первый элемент второго вектора в массиве (v[1][0]) не будет лежать никогда.
Комментариев нет:
Отправить комментарий