rusbaron
@rusbaron
Не стыдно не знать, стыдно не интересоваться

Как увеличить размер массива в C++?

Подскажите пожалуйста примерную идею,как можно увеличить размер массива на с++.
Задача такова,что есть динамический массив,который пользователь заполняет.Далее,нужно написать функцию,которая добавляет элемент к массиву только в том случае,если этот елемент отсутствует. Написал вот такую функцию:
int* addItemToArray(int* array, int size, int newItem){
	for (int i = 0; i < size; i++){
		if (newItem == *(array + i)){
			return nullptr;
		}
	}
	int* newArray = new int[size + 1];
	for (int i = 0; i < size; i++){
		*(newArray+i) == *(array + i);
	}
	*(newArray + size + 1) = newItem;
	return newArray;
}

Она возвращает адрес нового массива,далее пытаюсь принять этот результат:
int L,I;
		cout << "Input size of array:";
		cin >> L;
		int* lineArray = new int[L];
		srand(time(0));
		for (int j = 0; j < L; j++){
			cout << "Type number to fill array:";
			cin >> I;
		}
		cout << "Type number to add to array:";
		cin >> I;
		while ((lineArray = addItemToArray(lineArray, sizeof(lineArray) / sizeof(lineArray[0]), 4)) == nullptr){
			cout << "Number is already in array!Type another:";
			cin >> I;
		}

Но он мне возвращает нулевой адрес.На сколько я понимаю,это происходит из за того,что время жизни моего нового массива заканчивается на выходе из функции...Как это побороть?
  • Вопрос задан
  • 8887 просмотров
Решения вопроса 1
Adamos
@Adamos
1. Вы сами себя путаете, используя *(array + i) вместо array[i]
2. Вы создаете новый массив, не удаляя старый. Понятно, что в лабораторной это не критично. Но если вы собрались жить с С++, то либо вам будут резать глаз такие вещи, либо учите другой язык.
3. У вас есть функция, в которую передается массив и элемент. Функция возвращает либо новый массив, либо nullptr. Это противоестественно. Функция должна возвращать ссылку на массив - а новый он или старый, можно решать вне функции. Это кажется неважным, но хороший код базируется именно на таких мелочах, а говнокод растет именно из-за того, что "здесь же и так все понятно".
4. Наконец, в программе трэш. Запрашиваются значения для массива, но они не вводятся в сам массив. В массив добавляется не введенное значение, а 4 (?). lineArray сразу же теряется, поскольку ему присваивается nullptr...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Drakonn
@Drakonn
Инженер-программист
так же указателем передайте новый массив, он заполнится в методе и далее пользуйтесь им)
Ответ написан
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Я бы вам посоветовал посмотреть программу в оталдчике и понять что не так. Это действительно полезно для обучения. + поймёте что у вас неправильно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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