Добавление новых элементов в массив 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 можно прочитать здесь или, если знаете английский, то вот здесь.

→ Ссылка