rafaelfinalcut10 Ответов: 2

Динамические данные C++ – как их получить и как от них избавиться


Приведенный ниже код – это скелет программы, работающей на динамическом сборе данных. Идея состоит в том, чтобы использовать структуру, содержащую два поля: первое хранит количество элементов в коллекциях, а второе-фактическую коллекцию (динамически выделяемый вектор ints). Как видите, коллекция заполнена необходимым количеством псевдослучайных данных.
К сожалению, программа требует доработки, как самая важная функция.
Вот что я ожидаю от этой функции:
1. если коллекция пуста, она должна выделить одноэлементный вектор и сохранить в нем новое значение.
2. если коллекция не пуста, она должна выделить новый вектор с длиной, большей на единицу, чем текущий вектор, затем скопировать все элементы из старого вектора в новый, добавить новое значение к новому вектору и, наконец, освободить старый вектор.

Что я уже пробовал:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

struct Collection {
   int elno;
   int *elements;
};
void AddToCollection(Collection &col, int element) {
   //the first part of the funtion


}

void PrintCollection(Collection col) {
   cout << "[ ";
       for(int i = 0; i < col.elno; i++)
           cout << col.elements[i] << " ";
   cout << "]" << endl;
}
int main(void) {
    Collection collection = { 0, NULL };
    int elems;
    cout << "How many elements? ";
    cin >> elems;
    srand(time(NULL));
    for(int i = 0; i < elems; i++)
         AddToCollection(collection, rand() % 100 + 1);
    PrintCollection(collection);
    delete[] collection.elements;
    return 0;
}

2 Ответов

Рейтинг:
2

CPallini

Цитата:
int *temp;
temp = новый[];
Давайте зафиксируем вашу отправную точку. Вышеприведенные утверждения должны быть
int * temp;
temp = new int[col.elno + 1];
Теперь ваш temp вектор как нужное количество элементов.

Ты должен
  • Скопируйте все col.elements элементы в temp.
  • Добавь element в конце концов temp.
  • Выпускать col.elements память (delete он).
  • Набор col.elements равный temp.
  • Прирост col.elno

Вот и все, ребята.


rafaelfinalcut10

Спасибо тебе парень ты спас мне жизнь

CPallini

Добро пожаловать.

Рейтинг:
1

OriginalGriff

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

Внимательно прочитайте инструкцию и подумайте о том, что вам нужно. Вы могли бы легко завершить это за то время, которое вы потратили на повторную публикацию этого вопроса...