Tenk på følgende matrise:
char arr1 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';Dette er en rekke ti tegn fra bokstavene, 'F' til 'O'. Navnet på denne matrisen er ARR1. Tenk på følgende matrise:
char arr2 [] = 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o';Navnet på denne matrisen er ARR2. Legg merke til at begge innholdet er det samme. ARR2 ville være en dyp kopi av ARR1 hvis begge initializer_listene er i forskjellige regioner i datamaskinens minne. Denne artikkelen forklarer, manuell dyp kopiering av matrisen og automatisk dyp kopiering av matrisen, i C++.
Artikkelinnhold
- Manuell dyp kopiering av matrisen
- Automatisk dyp kopiering av matrisen
- Konklusjon
Manuell dyp kopiering av matrisen
Med denne tilnærmingen opprettes to matriser av samme størrelse. Den første har innhold mens den andre ikke har innhold. Innholdet i den første blir kopiert til den andre ved hjelp av for-loop. Følgende program illustrerer dette:
#inkludereDen første linjen i programmet inkluderer C ++ IOSTREAM -overskriften (bibliotek) for inngang og utgang. Denne første linjen er et direktiv. Den andre linjen er ikke et direktiv. Det er en uttalelse. Det insisterer på at ethvert navn som ikke er gitt std :: er av standardnavnet. Deretter er C ++ hovedfunksjonen.
Den første linjen i hovedfunksjonen () er et direktiv. Den definerer størrelsen på begge matriser, til å være 10. Det ender ikke med en semikolon. Det ender med pressen på tastaturet Enter -tasten '\ n' . Denne linjen kunne likt ha vært "int størrelse = 10;". Linjen etter er en uttalelse som definerer den første matrisen. Linjen følgende er erklæringen om den andre matrisen, uten praktisk initialisering, men med samme størrelse.
Det neste kodesegmentet i hovedfunksjonen, gjør kopien, elementet etter element, fra første til den andre matrisen.
Følgende to kodesegmenter kan legges til, for å skrive ut begge arrayinnholdet på terminalen (konsollen):
for (int i = 0; iUtgangen skal være,
F g h i j k l m n oAutomatisk dyp kopiering av matrisen
Her brukes STD :: Copy () -funksjonen, av C ++ Algoritmebiblioteket. Dette betyr at algoritmeoverskriften (biblioteket) må inkluderes i programmet. Det er ikke nødvendig å kopiere, element etter element, her. Prototypen til STD :: Copy () -funksjonen er:
malDet første argumentet er en iterator som peker på det første elementet i kildebeholderen (liste). Det andre argumentet er en iterator som peker rett utenfor det siste elementet i kildebeholderen. Det tredje argumentet er en iterator som peker på det første elementet i den tomme destinasjonsbeholderen, som allerede burde vært erklært.
Denne syntaksen kan tolkes for matriser med følgende prototype:
malPeker-til-Just-Past-Arr1 er den samme som, ARR1 + størrelse. Så, følgende program, gjør automatisk dyp kopiering av en rekke til en annen:
#inkludereLegg merke til inkludering av algoritmiblioteket. "Int -størrelse = 10;" har blitt brukt, i stedet for "char arr2 [størrelse];". Merk at matriser fortsatt måtte være av samme størrelse, men med den andre tomme. Den automatiske kopieringserklæringen er:
Kopi (ARR1, ARR1+størrelse, ARR2);Funksjonen trengte ikke å bli ført med "STD ::", siden det er "Bruke navneområde STD;" øverst i programmet.
Følgende to kodesegmenter kan legges til for å skrive ut begge arrayinnholdet på terminalen (konsollen):
for (int i = 0; iUtgangen skal være,
F g h i j k l m n oKonklusjon
I C ++ kan en matrise kopieres manuelt (for hånd) eller automatisk ved hjelp av STD :: Copy () -funksjonen fra C ++ Algoritmbiblioteket. I dataprogrammering er det grunt kopiering og det er dyp kopiering. Grunt kopiering er når to forskjellige array -navn (gamle og nye) refererer til det samme innholdet i minnet. Dyp kopiering er når de to forskjellige array -navnene refererer til to uavhengige, men samme innhold, i minnet. Denne artikkelen har omhandlet dyp kopiering og ikke grunt kopiering.
Med manuell dyp kopieringstilnærming opprettes to matriser av samme størrelse. Den første har innhold, mens den andre ikke har innhold. Innholdet i den første blir kopiert til den andre, ved hjelp av for-loop.
Automatisk dyp kopiering av en matrise til en annen i C ++ involverer STD :: Copy () -funksjonen til C ++ Algoritmebiblioteket. Dette betyr at algoritmeoverskriften (biblioteket) må inkluderes i programmet. Det er ikke nødvendig å kopiere element etter element med for-loop i dette tilfellet siden kopiering er automatisk. Prototypen for STD :: Copy () -funksjonen, tolket for matrisen, er:
mal