Другие языки программирования и технологии

Добавление удаление массивов

Здраствуйте, у меня есть программа которая выполнякт это условие: Дан массив a. После каждой группы подряд идущих одинаковых элементов добавить новый элемент содержащий длину последовательности.
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
int n, i, k = 0, t = 0; // объявление переменных
scanf ("%d", &n); // считываем размер N массива A
int a[n + 1], b[n + 1]; // объявляем массивы
for (i = 1; i <= n; i++)
{
scanf ("%d", &a); // считываем массив А
if (a != a[i - 1] && i != 1)
{
k++;
b[k] = t;
t = 1;
}
else
{
t++;
}
k++;
b[k] = a;

}
k++;
b[k] = t;
for (i = 1; i <= k; i++)
printf ("%d ", b); // выводим полученный массив на экран
system("PAUSE");
return 0;
}
Вопрос в том как записать эту задачу через добавлениие или удаление массивов?
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
int main() {
    size_t size = 25;
    int * a = new int [size];
    srand(unsigned(time(NULL)));
    for (size_t n = 0; n < size; n++) a[n] = 1 + rand() % 2;
    streamsize w = 2;
    for (size_t n = 0; n < size; n++) cout << setw(w) << a[n];
    cout << endl;
    size_t newsize = size;
    bool x = true;
    for (size_t n = 1; n < size; n++)
        if (x && a[n - 1] == a[n]) {
            ++newsize;
            x = false;
        } else if (a[n - 1] != a[n]) x = true;
    int * t = new int [size];
    for (size_t n = 0; n < size; n++) t[n] = a[n];
    delete[] a;
    a = NULL;
    a = new int [newsize];
    size_t n = 1, m = 1, count = 1;
    a[0] = t[0];
    x = false;
    while (n <= size) {
        if (n == size && count > 1) {
            a[m] = count;
            break;
        }
        a[m++] = t[n];
        if (t[n - 1] == t[n]) {
            x = true;
            ++count;
        } else if (x) {
            a[m - 1] = count;
            a[m++] = t[n];
            x = false;
            count = 1;
        }
        ++n;
    }
    for (size_t n = 0; n < newsize; n++) cout << setw(w) << a[n];
    cout << endl;
    delete[] a;
    delete[] t;
    cin.get();
    return 0;
}
Слава Исламов
Слава Исламов
96 397
Лучший ответ
так... .
если ты фанат Си стайла - есть realloc
если нет - то: delete[] array; array = new int[ m];
Можно сделать в два прохода - сначала посчитать длину результирующего массива, а за второй проход заполнить его. А можно поступить другим способом - рассмотреть самых худший вариант, в котором нет двух одинаковых чисел подряд. В таком случае можно обойтись без первого прохода, а выделить массив в два раза больше исходного.

массив можно выделить таким способом

int * array = (int*) calloc( n, sizeof(int));

удалить массив функцией free(array);

Упс. Ваш код претендует на С++..тогда выделяйте с помощью оператора new, а удаляйте оператором delete