Одномерный Массив. Добавить K Элементов, Начиная С Номера N

Pro100xXx

New member
20.01.2013
1
0
#1
Здравствуйте, Нужно добавить K элементов, начиная с номера N в одномерном массиве. Я не могу придумать способа как вставить элементы в массив!
Использую С++ Microsoft Visual studio 2012
Подайте идею. С помощью чего начать?

Вот начал делать. Но пока что тут только рандомный массив и элементы:

C++:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;

int main ()
{
setlocale (0,"rus");
cout << "Лабораторная работа № 5"<<endl;
cout << "Добавить К элементов, начиная с номера N."<<endl;
int N,E, i=0,n,k,p, d; 

cout << "Введите количество элементов K"<<endl;
cin>>k;
cout << "Введите номер N"<<endl;
cin>>n;
cout << "\nВведите количество элементов массива: "; 
cin>>N; int *arr; arr=new int[N]; cout << endl;
srand(time(0));
cout<<"Массив: "<<endl;
for (int i = 0; i<N; i++) {arr[i] = rand()%100; cout<< arr[i] << " ";}
cout<<endl;
cout<<"\nk: "<<endl;
for (int p = 0; p<k; p++) 
{
E=rand()%100;
cout<< E <<" ";}




cout<<endl;
system("pause");

}
ps прошу не смотреть на строку int N,E, i=0,n,k,p, d; из-за неиспользованных локальных переменных, знаю многим это не нравится :)
Просто приходили идеи, пытался реализовать, потом понимал что это полная чипуха

Заранее всем спасибо!
 
R

rrrFer

#2
отформатируй нормально код.
Я не могу придумать способа как вставить элементы в массив!
cout << "\nВведите количество элементов массива: ";
cin>>N; int *arr; arr=new int[N]; cout << endl;
Ты не сможешь так хитро *вставить* элемент в массив, чтобы его размер увеличился.

Ты выделил память под N элементов, значит в массиве будет только N элементов. Хочешь больше?
- можешь выделить с запасом
- можешь удалить старый массив, и создать новый, большего размера

Добавлено: а можешь комбинировать - выделяешь с запасом. но когда запас кончился - создаешь новый массив (опять с запасом)
всякие std::vector так и работают

Добавлено: или тебе вообще не понятно как элемент в массив вставить?
если вставляешь в определенную позицию (пусть pos), то сдвигаешь на 1 элемент все что "справа" от pos и затем пишешь новый элемент на место array[pos]
лучше отдельно обрабатывать вставку в конец.

если же запас, который ты задал при создании массива закончился:
создаешь новый массив, копируешь в него pos-1 элемент, вставляешь новый элемент в позицию pos и затем, дописываешь оставшиеся N-pos элементов
удаляешь старый массив
 
W

Whatka

#3
это не паскаль объявлять все переменные в одном месте
лучше объявлять по мере необходимости,ну не суть)

пусть есть массив a размера size (K+N<size)

C++:
//
for(int i=K;i<K+N;++i)
cin>>a[i];
//
 
W

Whatka

#5
ссылки нет,но это значительно упрощает чтение и отслеживание переменных
+ иногда сокрашет область видимости переменных
 
R

rrrFer

#6
область видимости да, и это единственный аргумент ИМХО.

Но если ты называешь переменную не i, n, j, a, b, num, t, tmp и некоторые другие распространенные имена временных переменных - то проблем с именами не возникает и резона сужать область видимости ИМХО нет.

А "чтение и отслеживание переменных" как раз упрощает их объявление в одном месте (естественно в начале функции, мы ведь только о функциях сейчас говорим?). Там же их удобно прокоментировать.

Это мое субъективное мнение. Ссылки у меня тоже нет )