Добавление новых элементов в массив c++
// присвоение 2 раза
#include <iostream>
using namespace std;
int main()
{
int a[0];
for (int i = 0; i < 10; i++){
int len = sizeof(a) / sizeof(a[0]);
a[len] = i;
a[len] = i;
cout << len << " " << a[len] << endl;
}
}
output: 0 0\n 1 1\n 2 2\n 3 3\n 4 4\n 5 5\n 6 6\n 7 7\n 8 8\n 9 9
// присвоение 1 раз
#include <iostream>
using namespace std;
int main()
{
int a[0];
for (int i = 0; i < 10; i++){
int len = sizeof(a) / sizeof(a[0]);
a[len] = i;
cout << len << " " << a[len] << endl;
}
}
output: 0 0\n 1 1\n 2 16061904\n 3 0\n 4 4199367\n 5 0\n 6 0\n 7 0\n 8 69\n 9 0
Я новичок в плюсах, так что буду благодарен, если кто-то поможет разобраться, в чем тут дело и как добавлять новый элемент в массив используя 1 присвоение, иначе код напоминает анекдот про функцию, которая работает 1 из 2 раз
Ответы (1 шт):
Автор решения: nyekitka
→ Ссылка
Массивы вида int a[n] - статические массивы. Их размер менять нельзя, память под них выделяется во время компиляции. Если вы хотите использовать массивы с меняющимся размером, то используйте STL класс std::vector<T>
Пример использования:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a;
for (int i = 0; i < 10; ++i) {
a.push_back(i); //добавляет число в конец массива
cout << i << ' ' << a[i] << '\n';
}
return 0;
}
Подробнее про vector можно прочитать здесь или, если знаете английский, то вот здесь.