Есть ли возможность добавить элемент в массив c++?

Рейтинг: 0Ответов: 1Опубликовано: 11.01.2023

Есть ли какая нибудь возможность добавить в конец встроенного массива c++ элемент? Т. е. аналог функции push_back для std::vector?

Ответы

▲ 3Принят

Если позволяет выделенная память - да.
Если вы реализуете концепцию отличия выделенной памяти для хранения от количества помещенных в массив объектов. Для этого вам надо хранить количество уже добавленных в массив элементов (итератор на последний добавленный элемент).
Или просто обернете свой массив в обертку std::Array<>. :)
А реализуется просто. При объявлении массива, вы считаете, что просто выделили память под это количество элементов, а сами элементы добавляете в массив только с помощью специальных функций. Естественно лучше это сделать с помощью класса. Но можно и на голом c

int MyArray[100]; // считаете, что это не массив из 100 элементов, а выделенная под 100 элементов память.
int MyArrayCount = 0; // счетчик количества элементов в массиве

// функции добавления/удаления элементов в массив
void push_back(int x)
{
    MyArray[MyArrayCount] = x;
    ++MyArrayCount;
}

Можете сами обертку написать - она не сложная. Можете использовать уже написанную std::Array<>.
Если не заморачиваться с владением объектом (выделением/удалением памяти), то обертка простенькая (проверять выход за пределы массива или нет - сами решаете)

class MyArray
{
   int* const mas;
   const size_t capacity;
   size_t size;

public:
   MyArray(int* _mas, size_t _capacity): 
        mas(_mas), capacity (_capacity), size(0) {}

   // далее все нужные функции
   void push_back(int x)
   {
       mas[size] = x;
       ++size;
   }
   int& back(void) { return mas[size]; }
   void pop_back() { --size; } 

   int& operator[](size_t ind);
   int& at(size_t ind);
   size_t size();
   bool empty();
}

int main()
{
    const int s = 100;
    int a[s];

    MyArray arr(a, s);

    arr.push_back(0);
}