2013-12-10 3 views
2

Я делаю программу, чтобы она могла добавлять любые числа в массив, а затем она сможет их модифицировать (вставлять, удалять). Я хочу знать, как создать новое значение в массиве без изменения чего-либо. Просто создайте значение и нажмите все остальное на следующий. Пример: insert 1 8 // insert - это просто команда, 1 - это место, где вы хотите создать новое значение, а 8 - это значение, поэтому list [1] = 8, но я хочу, чтобы остальные значения уже существовали, чтобы идти вперед 1 (если они находятся в том месте, где я хочу создать новое значение или выше, чем (речь идет о месте в списке))Вставить новое значение в элемент массива и переместить остальные элементы

Полный текст: Список:

5 
6 
7 
8 
9 

Команда: вставить 3 10 Новый список:

5 
6 
7 
10 //the one that changed,the rest from this point went 1 forward 
8 
9 
+0

Таким образом, вы должны написать связный список, или использовать контейнеры. В чем вопрос? – soon

+0

Вопрос в том, как я могу вставить элемент внутри массива в определенный индекс (позицию) и поместить остальные значения в массиве для 1 значения больше. Посмотрите на пример для более подробной информации. – user2699298

+0

Ответ: like [this] (http://en.cppreference.com/w/cpp/container/vector/insert) –

ответ

4

Что вы хотите использовать std::vector<int> что-то вроде этого:

std::vector<int> v = {5, 6, 7, 8, 9}; 
v.insert(v.begin() + 1, 8); // v[1] now equals 8, everything after push up one 
v.erase(v.begin() + 1);  // v is now as it was before above insert 
v.insert(v.begin() + 3, 10); // v[3] is now 10 
+0

'error: в C++ 98 'v' должен быть инициализирован конструктором, а не '{...}' |' и 'error: никакой подходящей функции для вызова в 'std :: vector > :: vector (<список инициализаторов, заключенных в фигурные скобки>) '| ' – user2699298

+0

@ user2699298 Используйте компилятор, совместимый с C++ 11. – Johan

+1

Мне нужно решение для старой версии (не C++ 11) извините, если я этого не скажу. – user2699298

1

Один из способов будет использовать std::vector и insert().

http://www.cplusplus.com/reference/vector/vector/

http://www.cplusplus.com/reference/vector/vector/insert/

Edit: если вы не можете использовать STL контейнеры и есть требование использовать массивы с стиле, в этом случае он не будет так просто, как вы выиграли» t иметь возможность напрямую выращивать их.

1

Пусть быть массивом, положение быть индексом в массиве, где значение должно быть вставлено и значение быть само значение.

Тогда попробуйте:

int i; 
for(i=CURRENT_SIZE_OF_ARRAY-1; i>=positon; --i) 
{ 
    a[i+1] = a[i]; 
} 
a[i]=value; 

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

+0

Хотя если массив заполнен значениями, которые вы хотите сохранить, последний элемент в массиве будет перезаписан. – splrs

+0

@splrs Это недостаток, если вы идете с массивами. Они имеют фиксированный размер и не могут динамически выделять больше памяти. Этот ответ относится к пользовательскому запросу, в котором он предпочитает использовать только массивы (см. Тег).В противном случае std :: vector - лучший и простой выбор для реализации этого. – CinCout

+0

Цикл, по существу, представляет собой ['std :: copy_backward'] (http://en.cppreference.com/w/cpp/algorithm/copy_backward), хотя здесь есть немного неудобный синтаксис:' copy_backward (begin (a) + position, begin (a) + CURRENT_SIZE_OF_ARRAY, 1 + begin (a) + CURRENT_SIZE_OF_ARRAY); ' – dyp

Смежные вопросы