Mnie osobiście bardzo odpowiadają wektory. Poniżej taki oto "na poczekaniu" zrobiony program, demonstrujący możliwe działania na wektorach. Tu akurat użyłem typu int, ale oczywiście równie dobrze można zastosować char. Na początku programu użytkownik wpisuje jedynie rozmiar wektora, a na końcu jest opcja z samodzielnym wpisywaniem elementów do wektora o wybranym rozmiarze.
#include <iostream>
#include <vector>//NIEZBEDNA BIBLIOTEKA
#include <time.h>
#include <windows.h>
int rozmiar,elementow1,elementow2,wartosc,numer;
using namespace std;
int main()
{
////////////////////DEKLARACJA WEKTOROW//////////////////////
//PIERWSZE W NAWIASIE-LICZBA ELEMENTOW W WEKTORZE, DRUGIE W NAWIASIE-ZAWARTOSC KOMORKI WEKTORA
vector <int> vec1(elementow1,wartosc);
vector <int> vec2(elementow2,wartosc);
////////////////////PRZYKLADOWE OPERACJE//////////////////////
//TWORZENIE WEKTORA O DANEJ DLUGOSCI:
cout<<"Podaj rozmiar wektora 1: ";
cin>>rozmiar;
srand(time(NULL));
for(int i=0;i<rozmiar;i++)
{
wartosc=rand()%10;//LOSOWANIE WARTOSCI OD 0-1 DO KOMOREK WEKTORA
vec1.push_back(wartosc);//FUNKCJA DODAWANIA NOWEJ WARTOSCI NA KONCU WEKTORA
}
cout<<endl<<endl<<"Oto rozmiar wektora 1: "<<vec1.size()<<endl<<endl;//FUNKCJA PODAWANIA ROZMIARU WEKTORA
cout<<"Oto elementy wektora 1: ";
for(int i=0;i<vec1.size();i++)
{
cout<<vec1.at(i)<<",";//FUNKCJA POKAZYWANIA WARTOSCI W WYBRANEJ KOMORCE WECTORA
}
cout<<endl<<endl<<"Podaj numer komorki wectora (od 0 do "<<vec1.size()<<"), ktorej wartosc chcesz poznac: ";
cin>>numer;
cout<<endl<<endl<<"Wybrana komórka ma wartosc: "<<vec1.at(numer)<<endl<<endl;
cout<<"Pierwsza komorka wektora 1 ma wartosc: "<<vec1.front()<<endl<<endl;//WYSWIETLANIE ZAWARTOSCI PIERWSZEJ KOMORKI
cout<<"Ostatnia komorka wektora 1 ma wartosc: "<<vec1.back()<<endl<<endl;//WYSWIETLANIE ZAWARTOSCI OSTATNIEJ KOMORKI
////////////////////ODCINANIE OSTATNIEJ KOMORKI WEKTORA//////////////////////////
vec1.pop_back();
cout<<"Po usunieciu ostatniego elementu wektora 1 jego rozmiat to: "<<vec1.size()<<endl<<endl;
//////////////////TWORZENIE ODWROCONEJ WERSJI WECTORA 1 W WECTORZE 2////////////////////////////
cout<<"Wector 1 sklada sie w tej chwili z nastepujacych elementow: ";
for(int i=0;i<vec1.size();i++)
{
cout<<vec1.at(i)<<",";
}
while(vec1.empty()==0)//DOPOKI NIEPRAWDA JEST, ZE WEKTOR 1 JEST PUSTY
{
wartosc=vec1.back();
vec2.push_back(wartosc);
vec1.pop_back();
}
cout<<endl<<endl<<"Po przeniesieniu elementow wectora 1 do wectora 2,";
cout<<" otrzymojemy taka ich odwrocona sekwencje: ";
for(int i=0;i<vec2.size();i++)
{
cout<<vec2.at(i)<<",";
}
cout<<endl<<endl;
vec2.clear();//CZYSZCZENIE WEKTORA Z WSZYSTKICH ELEMENTOW
cout<<"Po usunieciu wszystkich elementow, rozmiar wektora 2 wynosi: "<<vec2.size()<<endl;
cout<<endl<<"Wpisz ile elementow chcesz osobiscie wpisac do wektora 2: ";
cin>>rozmiar;
for(int i=0;i<rozmiar;i++)
{
cout<<"Wpisz "<<i+1<<" wartosc: ";
cin>>wartosc;
vec2.push_back(wartosc);
}
cout<<endl<<endl<<"Wpisane wartosci to: ";
for(int i=0;i<vec2.size();i++)
{
cout<<vec2.at(i)<<",";
}
cout<<endl<<endl;
}