Есть ли возможность добавить элемент в массив c++?
Есть ли какая нибудь возможность добавить в конец встроенного массива c++
элемент? Т. е. аналог функции push_back
для std::vector
?
Есть ли какая нибудь возможность добавить в конец встроенного массива c++
элемент? Т. е. аналог функции push_back
для std::vector
?
Если позволяет выделенная память - да.
Если вы реализуете концепцию отличия выделенной памяти для хранения от количества помещенных в массив объектов. Для этого вам надо хранить количество уже добавленных в массив элементов (итератор на последний добавленный элемент).
Или просто обернете свой массив в обертку 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);
}