Как добавить элемент к массиву C++?

$new_array = array_values(array_unique($rearrangedFinalData));

Удалите дубликаты и переставьте ключи (при необходимости), прежде чем поместить свой массив в foreach.

Затем вы можете использовать $new_array для генерации вашего HTML

59
задан CoffeeRain 22 February 2012 в 18:51
поделиться

7 ответов

Там невозможно делать то, что вы говорите на C ++, с простыми массивами. Решением C ++ для этого является использование библиотеки STL, которая дает вам std :: vector .

Вы можете использовать вектор следующим образом:

std::vector< int > arr;

arr.push_back(1);
arr.push_back(2);
arr.push_back(3);
58
ответ дан 24 November 2019 в 18:04
поделиться

Массивы в C ++ не могут изменять размер во время выполнения. Для этого вам следует использовать вместо этого вектор vector .

vector<int> arr;
arr.push_back(1);
arr.push_back(2);

// arr.size() will be the number of elements in the vector at the moment.

Как уже упоминалось в комментариях, вектор определен в заголовке vector и в заголовке . std пространство имен. Чтобы использовать его, вы должны:

#include

, а также либо использовать std :: vector в своем коде, либо добавить

using std::vector; 

или

using namespace std;

после #include line.

68
ответ дан 24 November 2019 в 18:04
поделиться

Используйте вектор:

#include <vector>

void foo() {
    std::vector <int> v;
    v.push_back( 1 );       // equivalent to v[0] = 1
}
13
ответ дан 24 November 2019 в 18:04
поделиться
int arr[] = new int[15];

Переменная arr содержит адрес памяти. По адресу памяти 15 последовательных строк подряд. На них можно ссылаться с индексом от 0 до 14 включительно.

В php я могу просто сделать это arr [] = 22; это автоматически добавит 22 к следующий пустой индекс массива.

Не существует понятия «следующий» при работе с массивами.
Я думаю, вы упускаете одну важную вещь: как только массив создан, все элементы массива уже существуют. Они неинициализированы, но все они уже существуют. Таким образом, вы не «заполняете» элементы массива по ходу, они уже заполнены, просто неинициализированными значениями. Невозможно проверить наличие неинициализированного элемента в массиве.

Похоже, вы хотите использовать структуру данных, такую ​​как очередь или стек или вектор .

13
ответ дан 24 November 2019 в 18:04
поделиться

Я полностью согласен с векторным способом при реализации динамического массива. Однако имейте в виду, что STL предоставляет вам множество контейнеров, отвечающих различным требованиям времени выполнения. Вы должны выбирать один с осторожностью. Например: для быстрой вставки сзади у вас есть выбор между вектором и декой .

И я почти забыл, с большой силой приходит большая ответственность :-) Так как vector являются гибкими по размеру, они часто автоматически перераспределяются, чтобы приспособиться к добавлению элементов. Так что остерегайтесь аннулирования итератора (да, это относится и к указателям). Однако, если вы используете operator [] для доступа к отдельным элементам, вы в безопасности.

6
ответ дан 24 November 2019 в 18:04
поделиться

Я, возможно, упускаю суть вашего вопроса здесь, и если так, то извиняюсь. Но если вы не собираетесь удалять какие-либо элементы, а только добавляете их, почему бы просто не присвоить переменную следующему пустому слоту? Каждый раз, когда вы добавляете новое значение в массив, просто увеличивайте значение, чтобы оно указывало на следующее.

В C ++ лучшим решением является использование стандартного типа библиотеки std :: list , что также позволяет динамически увеличивать массив, например:

#include <list>

std::list<int> arr; 

for (int i = 0; i < 10; i++) 
{
    // add new value from 0 to 9 to next slot
    arr.push_back(i); 
}

// add arbitrary value to the next free slot
arr.push_back(22);
2
ответ дан 24 November 2019 в 18:04
поделиться

Если вы пишете на C ++, то лучше использовать структуры данных из стандартных библиотека, такая как vector.

Массивы в стиле C очень подвержены ошибкам, и их следует по возможности избегать.

1
ответ дан 24 November 2019 в 18:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: