Я думаю, что следующий фрагмент кода совершенно допустим (он все равно собирается на MS Visual Studio 2008, C ++).
Я использую его для ссылки на стороннюю библиотеку. Но я думаю, что поскольку я передаю указатель на элемент вектора вместо обычного указателя, которого ожидает сторонняя библиотечная функция, я получаю ошибку во время выполнения
В библиотеке времени выполнения C обнаружен неверный параметр
Что я здесь не так делаю?
* * 1010
Но выполнение этого после сборки на MS Visual Studio 2008 (Windows Vista) приводит к ошибке времени выполнения, как упоминалось выше, а именно,
В библиотеке времени выполнения C обнаружен недопустимый параметр
Еще не тестировал это в Linux, и я уверен, что не буду копировать содержимое вектора в массив только для этого. Есть идеи, что происходит?
Дальнейшее редактирование, чтобы подтвердить использование рекомендаций Ника и Криса и продолжить обсуждение с Владом и др .; вот фрагмент кода:
#include <iostream>
#include <vector>
int main() {
for(int i=2; i<6; ++i) {
int isq = i*i;
std::vector<int> v;
v.reserve(4);
for(int j=0; j<isq; ++j) {
v.push_back(j);
}
std::cout << "Vector v: size = " << v.size() << " capacity = " << v.capacity()
<< "\n";
std::cout << "Elements: \n";
for(int k=0; k<v.size(); ++k) {
std::cout << v.at(k) << " ";
}
std::cout << "\n\n";
}
return 0;
}
Дает вывод:
Vector v: size = 4 capacity = 4
Elements:
0 1 2 3
Vector v: size = 9 capacity = 16
Elements:
0 1 2 3 4 5 6 7 8
Vector v: size = 16 capacity = 16
Elements:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Vector v: size = 25 capacity = 32
Elements:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
22 23 24
Так что по крайней мере для использования в этом контексте, где не используется явное изменение размера, кажется, что оно работает как задумано / ожидаемо.