Доброго времени суток.
Вопрос следующий. В.h файле объявлен какой-то класс, членом которого является:
class some {
....
vector<some_type> a;
};
В каком-то месте в реализации мне надо задать реальный размер этого вектора. Пытаюсь сделать это двумя способами:
...
int size=...;
a=vector<some_type>(size); // 1-ый способ
a.assign(size,zerostructure); // 2-ой способ
....
Оба варианта нормально компилируются. И при исполнении вылетает ошибка access violation в коде _algobase.h. Поясните, пожалуйста, что может быть не так, и как еще можно указать размер вектора. Пользуюсь C++Builder 6.
Здравствуйте, Данилович Алексей, Вы писали:
ДА>Доброго времени суток. ДА>Вопрос следующий. В.h файле объявлен какой-то класс, членом которого является: ДА>class some { ДА>.... ДА>vector<some_type> a;
ДА>};
ДА>В каком-то месте в реализации мне надо задать реальный размер этого вектора. Пытаюсь сделать это двумя способами: ДА>... ДА>int size=...; ДА>a=vector<some_type>(size); // 1-ый способ ДА>a.assign(size,zerostructure); // 2-ой способ ДА>....
ДА>Оба варианта нормально компилируются. И при исполнении вылетает ошибка access violation в коде _algobase.h. Поясните, пожалуйста, что может быть не так, и как еще можно указать размер вектора. Пользуюсь C++Builder 6.
ДА>Огомное спасибо.
Изменять размер следует через функцию resize.
vector<int> x;
x.resize(10); // 10 элементов
x.resize(100); // 100 элементов
Здравствуйте, Данилович Алексей, Вы писали:
ДА>В каком-то месте в реализации мне надо задать реальный размер этого вектора. Пытаюсь сделать это двумя способами:
Для изменения размера вектора используется ф-я resize. Так же посмотри еще в сторону reserve.
Твои способы в принципе тоже корректны, но выглядят как-то небычно что ли...
Что касается ошибки — то скорее всего где-то вылез за пределы массива. Попробуй вместо operator[]
использовать at() — эта функция проверяет нидекс на валидность, и в случае чего кидает исключение:
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, Данилович Алексей, Вы писали:
B>Для изменения размера вектора используется ф-я resize. Так же посмотри еще в сторону reserve. B>Твои способы в принципе тоже корректны, но выглядят как-то небычно что ли... B>Что касается ошибки — то скорее всего где-то вылез за пределы массива. Попробуй вместо operator[] B>использовать at() — эта функция проверяет нидекс на валидность, и в случае чего кидает исключение:
B>
Врядли я где-то успел вылезти за границы — это первое, что с вектором я делаю. подозреваю осбенности реализации STL для билдера, ибо то, что Вы назвали странным, подчерпано из Страуструпа. Спасибо за resize, видимо всплывает то, что по-порядку его читать нет времени.
Здравствуйте, Данилович Алексей, Вы писали:
ДА>Здравствуйте, Bell, Вы писали:
B>>Здравствуйте, Данилович Алексей, Вы писали:
B>>Для изменения размера вектора используется ф-я resize. Так же посмотри еще в сторону reserve. B>>Твои способы в принципе тоже корректны, но выглядят как-то небычно что ли... B>>Что касается ошибки — то скорее всего где-то вылез за пределы массива. Попробуй вместо operator[] B>>использовать at() — эта функция проверяет нидекс на валидность, и в случае чего кидает исключение:
B>>
B>>vector<int> v;
B>>v.resize(10);// В векторе 10 элементов с индексами 0..9
B>>v.at(10) = 0;//exception <- Выход за границы вектора!
B>>
Здравствуйте, Данилович Алексей, Вы писали:
B>>Для изменения размера вектора используется ф-я resize. Так же посмотри еще в сторону reserve. B>>Твои способы в принципе тоже корректны, но выглядят как-то небычно что ли... B>>Что касается ошибки — то скорее всего где-то вылез за пределы массива. Попробуй вместо operator[] B>>использовать at() — эта функция проверяет нидекс на валидность, и в случае чего кидает исключение:
B>>
ДА>Врядли я где-то успел вылезти за границы — это первое, что с вектором я делаю. подозреваю осбенности реализации STL для билдера, ибо то, что Вы назвали странным, подчерпано из Страуструпа. Спасибо за resize, видимо всплывает то, что по-порядку его читать нет времени.
1. С билдером все в порядке ибо у него STLport используется.
2. В векторе. как в массиве, нумерация от 0 до 9, поэтому 10 вызывает исключение.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!