Форум программистов, компьютерный форум CyberForum.ru

Перед указанным элементом массива вставить новый элемент - C++

Восстановить пароль Регистрация
 
Oseg
0 / 0 / 0
Регистрация: 25.05.2014
Сообщений: 18
06.06.2014, 13:50     Перед указанным элементом массива вставить новый элемент #1
Дан массив размера N и целое число K (1 ≤ K ≤ N). Перед элемен-
том массива с порядковым номером K вставить новый элемент с нулевым
значением.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2014, 13:50     Перед указанным элементом массива вставить новый элемент
Посмотрите здесь:

C++ Вставить в вектор новый элемент перед элементом с заданным индексом
Перед каждым положительным элементом массива вставить элемент с нулевым значением, перезаписать эти элементы во второй массив C++
C++ Доработка структуры (удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером)
C++ Удалить первый элемент с заданным объемом информации, добавить элемент перед элементом с указанным номером
Вставить новый элемент, перед всеми чётными элементами одномерного массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
D_Ok
43 / 32 / 12
Регистрация: 11.02.2014
Сообщений: 134
06.06.2014, 14:22     Перед указанным элементом массива вставить новый элемент #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
using namespace std;
int main()
{
    int n, k;
    cin >> n;
    int *arr = new int [n];
    for (int i = 0; i < n; ++i)
        arr[i] = i+1;
    for (int i = 0; i < n; ++i)
    {
        cout << "["<<i+1<<"] - "<< arr[i] << endl; 
    }
    cin >> k;
    ++n;
    int * temp = new int [n];
    for(int i = 0; i < n; ++i)
    {
        if (i < k-1)
            temp[i] = arr[i];
        else if(i==k-1)
            temp[i] = 0;
        else 
            temp[i] = arr[i-1];
    }
    delete [] arr;
    *arr = *temp;
    for ( int i = 0; i < n; ++i)
        arr[i] = temp[i];
    delete []temp;
    cout << endl;
    for (int i = 0; i < n; ++i)
    {
        cout << "["<<i+1<<"] - "<< arr[i] << endl; 
    }
return 0;
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
06.06.2014, 14:31     Перед указанным элементом массива вставить новый элемент #3
D_Ok, ну и зачем тебе тут понадобилась строчка *arr=*temp ?
D_Ok
43 / 32 / 12
Регистрация: 11.02.2014
Сообщений: 134
06.06.2014, 14:37     Перед указанным элементом массива вставить новый элемент #4
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
ну и зачем тебе тут понадобилась строчка *arr=*temp ?
ну вроде, для того что бы создать массив arr
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5437 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
06.06.2014, 14:45     Перед указанным элементом массива вставить новый элемент #5
Цитата Сообщение от D_Ok Посмотреть сообщение
для того что бы создать массив arr
Kuzia domovenok имеет в виду, что приваивание первого элемента массива не создаст весь массив. Если вы хотели чтобы массив arr указывал на область массива temp, то надо было так и написать:
C++
1
arr = temp;
D_Ok
43 / 32 / 12
Регистрация: 11.02.2014
Сообщений: 134
06.06.2014, 14:48     Перед указанным элементом массива вставить новый элемент #6
а ну да, каюсь((
тогда там надо так

26 delete [] arr;
27 arr = new int[n];

ато жуки могут вылезти
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
06.06.2014, 14:55     Перед указанным элементом массива вставить новый элемент #7
Нифига ты его не создал - ты его удалил строчкой ранее! А то, что я указал - попытка присвоить нулевому элементу массива арр - значение нулевого элемента массива тмп! Мало того, что она бессмысленна (все элементы арр и так будут копироваться в след. Строке). Так ещё и память под новый арр так и не выделилась как ты хотел!
Надо арр = new int [n+1]
либо вообще арр=temp (без звёзд)
D_Ok
43 / 32 / 12
Регистрация: 11.02.2014
Сообщений: 134
06.06.2014, 15:03     Перед указанным элементом массива вставить новый элемент #8
Kuzia domovenok, согласен же, что так не создал, написал же. А насчет того что (все элементы арр и так будут копироваться в след. Строке) элементы куда будут копироваться, память то я почистил а новую перед тем не выделил, и арр=temp тоже не поможет, темп ведь тоже чистится, надо арр = new int [n], (n уже был там увеличен)
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
06.06.2014, 15:21     Перед указанным элементом массива вставить новый элемент #9
Цитата Сообщение от D_Ok Посмотреть сообщение
темп ведь тоже чистится,
а ты не чисти!
D_Ok
43 / 32 / 12
Регистрация: 11.02.2014
Сообщений: 134
06.06.2014, 15:22     Перед указанным элементом массива вставить новый элемент #10
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а ты не чисти!
нас учат убирать за собой
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2014, 17:01     Перед указанным элементом массива вставить новый элемент
Еще ссылки по теме:

Перед элементом массива с порядковым номером K вставить новый элемент с нулевым значением C++
Перед элементом массива с порядковым номером K вставить новый элемент C++
C++ Перед каждым положительным элементом массива вставить нулевой элемент

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
06.06.2014, 17:01     Перед указанным элементом массива вставить новый элемент #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
D_Ok, так нафига чистить то, что тебе нужно-то?! Ты выделил новый массив, скопировал в него данные, всё! Освобождай память лишь в конце работы!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int* array=new int[N];
//работаем
int* tmp=new int[N+1];
//копируем
for(int i = 0; i < n; ++i)
 if (i < k-1)
//...
delete[] array;//чистим старый
array=tmp;
//зачем делать delete[] temp, блин?
//снова работаем, до конца программы 
//конец программы
delete[] array;
Что не так-то? Ты ещё хочешь что-то чистить?
Yandex
Объявления
06.06.2014, 17:01     Перед указанным элементом массива вставить новый элемент
Ответ Создать тему
Опции темы

Текущее время: 10:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru