Hvordan smelter du sammen matriser i C++?

Hvordan smelter du sammen matriser i C++?
Anta at du har en rekke 5 tegn og en annen rekke 8 tegn. Hvis disse to matrisene kombineres i en matrise, er begge matriser blitt slått sammen. Den nye matrisen ville ha 13 tegn (= 5 + 8). Rekkefølgen som de forskjellige matriseelementene er ordnet i den nye matrisen, spiller ingen rolle; Og det er sammenslåing av to matriser.

I C ++ er det et teknisk problem, i den forstand at tre matriser resulterer i stedet for den nye sammenslåtte matrisen. Ville det ikke være fint å slette de gamle to matriser etter sammenslåing, og frigjøre ubrukt minne? C ++ har to måter å få to matriser slått sammen på: Hvis de to matriser slått sammen, brukt dynamisk minne, kan de slettes for å ende opp med en matrise; Ellers ender programmereren med tre matriser.

Å slå sammen matriser ved å til slutt bare passe den ene bakerst i den andre er bra; Men det kan være bedre å ha litt minimal sortering når matriser er slått sammen. Sortering som en helhet, er et helt tema i programmering. Sortering som helhet blir ikke adressert i denne artikkelen. Imidlertid blir en veldig enkel minimal sortering adressert.

Denne artikkelen forklarer hvordan du kan slå sammen to matriser, for å ende opp med tre matriser, og hvordan du slår sammen to matriser for å ende opp med en matrise. Noe minimal sortering blir også vurdert. For å slå sammen to matriser, må de to matriser være av samme type.

Prosedyren for å slå sammen to matriser, kan utvides til mer enn to matriser.

Artikkelinnhold

  • Slå sammen matriser uten gratis butikk
  • Slår sammen matriser ved hjelp av gratis butikk
  • Konklusjon

Slå sammen matriser uten gratis butikk

Slå sammen uten sortering

Tenk på følgende to matriser:

char arr1 [] = 'i', 'j', 'k', 'l', 'm';
char arr2 [] = 'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h';

Den første har 5 elementer og den andre har 8 elementer. Hvis elementene i den andre matrisen på en eller annen måte er montert på baksiden av den første matrisen, vil en rekke 13 elementer bli dannet. For å oppnå dette uten å bruke gratis butikk (dynamisk minne), må en tredje matrise på 13 tomme verdier opprettes først. Da vil de 5 verdiene for den første matrisen bli kopiert, til de første 5 stedene i den tredje matrisen. De 8 verdiene for den andre matrisen vil neste bli kopiert til de resterende 8 stillingene til den tredje matrisen. Den tredje matrisen blir den sammenslåtte og ønskede matrisen. Følgende program illustrerer dette:

#inkludere
ved hjelp av navneområdet STD;
int main ()

char arr1 [] = 'i', 'j', 'k', 'l', 'm';
char arr2 [] = 'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h';
char arr3 [13];
for (int i = 0; i< 5; i++)
arr3 [i] = arr1 [i];

for (int i = 5; i< 13; i++)
arr3 [i] = arr2 [i-5];

for (int i = 0; i< 13; i++)
cout<< arr3[i] << ";

cout<retur 0;

Utgangen er:

I J K L M A B C D E F G H

Legg merke til hvordan indeksering har blitt brukt i For-Loops. Problemet med denne ordningen er at de to første matriser har blitt overflødige. De okkuperer nå datamaskinens minne unødvendig. Uten gratis butikk (dynamisk minne) kan ikke matriser fjernes fra minnet før de går ut av omfang. For å løse dette problemet, bruk gratis butikk - se nedenfor.

Det første kodesegmentet inkluderer iostream -biblioteket og erklærer bruken av standard navneområdet for resten av programmet. Resten av programmet er i hovedfunksjonen (). De tre første uttalelsene i hovedfunksjonen () erklærer den første, andre og tredje matriser. Neste kodesegment er en for-loop som kopierer alle elementene fra den mindre matrisen til den tredje matrisen. Det større utvalget av de to første, kunne ha blitt kopiert først; det betyr ikke noe.

Neste kodesegment bruker For-loop for å kopiere den større matrisen på baksiden av den mindre matrisen allerede i den tredje matrisen. Den tredje matrisen er den sammenslåtte matrisen. Summen av antall elementer i de to første matriser skal være lik antall elementer i den tredje matrisen. Det siste kodesegmentet viser verdiene i den tredje matrisen.

Slår sammen med en sortering

Mens du setter inn elementer i den tredje matrisen, kan de første elementene i begge arrayene sammenlignes og den mindre verdien som først er satt inn før den første verdien av den andre arrayen. De andre elementene i begge matriser kan sammenlignes neste, og den mindre verdien settes inn i den tredje matrisen, før den andre verdien av den andre arrayen, settes inn. De tredje elementene i begge matriser kan sammenlignes neste, og den mindre verdien som er satt inn før den tredje verdien av den andre matrisen. Denne prosedyren fortsetter til alle elementene i den kortere matrisen er satt inn sammen med samme antall elementer i den lengre matrisen. Resten av elementene i den lengre matrisen kan bare skyves inn i den tredje matrisen i deres ordre. Følgende program illustrerer dette:

#inkludere
ved hjelp av navneområdet STD;
int main ()

char arr1 [] = 'i', 'j', 'k', 'l', 'm';
char arr2 [] = 'a', 'b', 'c', 'd', 'e', ​​'f', 'g', 'h';
char arr3 [13];
for (int i = 0; i< 5; i++)
if (arr1 [i] < arr2[i])
arr3 [i*2] = arr1 [i];
arr3 [i*2+1] = arr2 [i];

annet
arr3 [i*2] = arr2 [i];
arr3 [i*2+1] = arr1 [i];


for (int i = 5; i< 8; i++)
arr3 [i+5] = arr2 [i];

for (int i = 0; i< 13; i++)
cout<< arr3[i] << ";

cout<retur 0;

Utgangen er:

A I B J C K D L E M F G H

Legg merke til aritmetikken som brukes i indeksene.

Slår sammen matriser ved hjelp av gratis butikk

Slå sammen uten sortering

Gratis butikk er tildelt et program som skal brukes når det trenger ekstra minne. En matrise kan opprettes og slettes i gratis butikk med henholdsvis den nye [] operatøren og Delete [] -operatøren. Ovennevnte to programmer vil bli gjentatt nedenfor. De første og andre matriser vil bli opprettet dynamisk i gratis butikk, og bli slettet etter at den tredje sammenslåtte matrisen er laget. Den tredje matrisen vil bli opprettet i normalt minne (område).

Følgende program illustrerer dette for sammenslåing uten å sortere:

#inkludere
ved hjelp av navneområdet STD;
int main ()

char *arr1 = ny røye [5];
arr1 [0] = 'i'; arr1 [1] = 'J'; arr1 [2] = 'k'; arr1 [3] = 'l'; arr1 [4] = 'm';
char *arr2 = ny røye [8];
arr2 [0] = 'a'; arr2 [1] = 'b'; arr2 [2] = 'C'; arr2 [3] = 'd'; arr2 [4] = 'e'; arr2 [5] = 'f'; arr2 [6] = 'g'; arr2 [7] = 'h';
char arr3 [13];
// sammenslåing
for (int i = 0; i< 5; i++)
arr3 [i] = arr1 [i];

for (int i = 5; i< 13; i++)
arr3 [i] = arr2 [i-5];

slett [] arr1;
slett [] arr2;
for (int i = 0; i< 13; i++)
cout<< arr3[i] << ";

cout<retur 0;

Utgangen er:

I J K L M A B C D E F G H

Navnet på matriser i gratis butikk er pekere. Plasseringene av elementene i ARR1 og ARR2 ble slettet etter bruken av i programmet. Resten av koden er som en tidligere.

Slår sammen med en sortering

Det forrige programmet med en sortering gjentas her. Her er imidlertid de første og andre matriser laget i gratis butikk. De blir slettet etter bruken av dem. Programmet er:

#inkludere
ved hjelp av navneområdet STD;
int main ()

char *arr1 = ny røye [5];
arr1 [0] = 'i'; arr1 [1] = 'J'; arr1 [2] = 'k'; arr1 [3] = 'l'; arr1 [4] = 'm';
char *arr2 = ny røye [8];
arr2 [0] = 'a'; arr2 [1] = 'b'; arr2 [2] = 'C'; arr2 [3] = 'd'; arr2 [4] = 'e'; arr2 [5] = 'f'; arr2 [6] = 'g'; arr2 [7] = 'h';
char arr3 [13];
// sammenslåing
for (int i = 0; i< 5; i++)
if (arr1 [i] < arr2[i])
arr3 [i*2] = arr1 [i];
arr3 [i*2+1] = arr2 [i];

annet
arr3 [i*2] = arr2 [i];
arr3 [i*2+1] = arr1 [i];


for (int i = 5; i< 8; i++)
arr3 [i+5] = arr2 [i];

slett [] arr1;
slett [] arr2;
for (int i = 0; i< 13; i++)
cout<< arr3[i] << ";

cout<retur 0;

Utgangen er:

A I B J C K D L E M F G H

Konklusjon

Sammenslåing av matriser er faktisk en enkel ting. Bare til slutt passer den ene matrisen på baksiden av den andre matrisen, og du har slått sammen de to matriser. Problemene programmerere står overfor med sammenslåing av matriser, har ikke å gjøre med å montere en rekke på baksiden av en annen matrise. De har å gjøre med å slette de to foregående matriser og/eller sortere den sammenslåtte matrisen. Arrays må være av samme type, for å bli slått sammen.

Hvis noen av de to første matriser ikke lenger vil være nødvendig etter sammenslåing, bør den opprettes dynamisk i gratis butikk, og deretter bli slettet etter bruk, til Free Memory. Den sammenslåtte matrisen kan også opprettes i gratis butikk, men det er ikke nødvendig.

Den sammenslåtte matrisen kan sorteres i forskjellige omfang. Komplett sortering er et helt emne i dataprogrammering. Komplett sortering er av forskjellige ordninger i dataprogrammering. Det er en ordning som heter Merge-Sort. Denne ordningen gjør sammenslåing og sortering samtidig. Imidlertid ser det mest populære opplegget ut til å være Quicksort.