C++ Vektor Hapus vs Hapus

C Vektor Hapus Vs Hapus



Vektor C++ memiliki banyak fungsi anggota. Dua diantaranya adalah hapus() dan hapus(). jernih() “menghapus” semua elemen vektor. erase() “menghapus” satu elemen atau serangkaian elemen. Ada dua varian fungsi anggota wipe() yang kelebihan beban untuk vektor.

Judul artikel ini sebenarnya adalah “Fungsi Anggota Vector clear() versus Fungsi Anggota Vector wipe(), dalam C++”. Ini adalah perbandingan fungsi dua anggota. Ini berkaitan dengan kapan menggunakan yang mana, bagaimana menggunakan yang mana, dan dalam kondisi apa salah satu dari keduanya digunakan.







Untuk menggunakan vektor dalam program C++, program harus dimulai dengan:



#termasuk

#termasuk

menggunakan ruang nama std ;

Isi Artikel

Vektor jelas()

Fungsi anggota clear() “menghapus” semua elemen vektor. Sintaksnya adalah:



ruang kosong jernih ( )

Ia kembali batal. Program berikut mengilustrasikan penggunaannya, dengan ekspresi, “vtr.clear();”:





#termasuk

#termasuk

menggunakan ruang nama std ;



ke dalam utama ( )

{

vektor < arang > vtr = { 'P' , 'Q' , 'R' , 'S' , 'T' , 'DI DALAM' } ;



untuk ( vektor < arang > :: iterator dia = vtr. mulai ( ) ; dia ! = vtr. akhir ( ) ; dia ++ )

cout << * dia << ' ' ;

cout << akhir ;



vtr. jernih ( ) ;



untuk ( vektor < arang > :: iterator dia = vtr. mulai ( ) ; dia ! = vtr. akhir ( ) ; dia ++ )

cout << * dia << ' ' ;

cout << akhir ;



kembali 0 ;

}

Outputnya adalah satu baris:

P Q R S T U

Jika vektor tidak dihapus, keluarannya akan berupa dua baris dengan urutan yang sama. Tidak ada baris kedua yang ditampilkan karena semua elemen telah dihapus.



const vektor dan hapus()

Jika deklarasi vektor diawali dengan const, berarti elemen vektor tidak dapat dihapus atau diubah. Jika suatu ekspresi mencoba mengubah atau menghapus salah satu elemen, program tidak akan dapat dikompilasi. Uji program berikut dan perhatikan bahwa program tersebut tidak dapat dikompilasi:

#termasuk

#termasuk

menggunakan ruang nama std ;



ke dalam utama ( )

{

konstanta vektor < arang > vtr = { 'P' , 'Q' , 'R' , 'S' , 'T' , 'DI DALAM' } ;



untuk ( vektor < arang > :: const_iterator dia = vtr. mulai ( ) ; dia ! = vtr. akhir ( ) ; dia ++ )

cout << * dia << ' ' ;

cout << akhir ;



vtr. jernih ( ) ;



untuk ( vektor < arang > :: const_iterator dia = vtr. mulai ( ) ; dia ! = vtr. akhir ( ) ; dia ++ )

cout << * dia << ' ' ;

cout << akhir ;



kembali 0 ;

}

Jika program diuji, pesan kesalahan akan dikeluarkan, dan tidak akan ada kompilasi apa pun. Karena vektor dinyatakan konstan, fungsi clear() tidak dapat beroperasi, sehingga muncul pesan kesalahan dari compiler.

Catatan: clear() menghapus semua elemen vektor. Sebenarnya, ini menandai semua elemen sebagai dihapus, sehingga kode lain dapat mengambil lokasi memorinya. Jika lokasi memori suatu elemen belum diambil oleh kode lain, maka elemen tersebut masih dapat digunakan kembali atas nama vektor yang sama.

Penghapusan Vektor

Sintaks yang disederhanakan untuk dua fungsi anggota wipe() adalah:

A. menghapus ( Q )

Dan

A. menghapus ( q1,q2 )

dimana a adalah nama vektornya.

penghapusan iterator (posisi const_iterator)

Ini adalah sintaks lengkap untuk “a.erase(q)”. Ia mengembalikan sebuah iterator yang menunjuk ke elemen, yang berada tepat di belakang elemen yang dihapus. Argumennya, q adalah iterator yang menunjuk ke elemen yang akan dihapus. Program berikut menggambarkan hal ini:

#termasuk

#termasuk

menggunakan ruang nama std ;



ke dalam utama ( )

{

vektor < arang > vtr = { 'P' , 'Q' , 'R' , 'S' , 'T' , 'DI DALAM' } ;



vektor < arang > :: iterator mengulangi = vtr. mulai ( ) ;

++ mengulangi ; ++ mengulangi ;



vektor < arang > :: iterator dia = vtr. menghapus ( mengulangi ) ;



untuk ( ke dalam Saya = 0 ; Saya < vtr. ukuran ( ) ; Saya ++ ) {

cout << vtr [ Saya ] << ' ' ;

}

cout << akhir ;



cout << * dia << akhir ;



kembali 0 ;

}

Outputnya adalah:

PQSTU

S

'R' telah dihapus. Iterator yang dikembalikan sekarang menunjuk ke 'S', yang berada tepat setelah 'R'. Fungsi anggota, Begin(), mengembalikan iterator yang menunjuk ke elemen pertama vektor. Dalam kodenya, iterator ini ditambah dua kali untuk menunjuk ke 'R'. 'R' dihapus dengan ekspresi, “vtr.erase(iter)”.

Rentang dalam Vektor

Untuk daftarnya,

'P' , 'Q' , 'R' , 'S' , 'T' , 'DI DALAM'

barisan 'Q', 'R', 'S', 'T' adalah suatu rentang. Namun, dengan container C++, elemen terakhir, 'T' tidak dianggap sebagai bagian dari rentang. Hal ini ditunjukkan secara umum sebagai:

[ aku j )

atau

[ q1, q2 )

'[' dalam hal ini berarti elemen pertama dalam barisan disertakan, dan ')' berarti elemen terakhir tidak disertakan.

hapus iterator (const_iterator pertama, const_iterator terakhir)

Ini adalah sintaks lengkap untuk “a.erase(q1,q2)”. Ia mengembalikan sebuah iterator yang menunjuk ke elemen, yang berada tepat di belakang rentang yang dihapus. Catatan: elemen terakhir dalam rentang tersebut tidak terhapus. Jadi, iterator yang dikembalikan akan menunjuk ke elemen terakhir dari rentang tersebut. Argumen q1 dan q2 adalah iterator yang menunjuk ke elemen pertama dan terakhir dari rentang tersebut. Program berikut menggambarkan hal ini:

#termasuk

#termasuk

menggunakan ruang nama std ;



ke dalam utama ( )

{

vektor < arang > vtr = { 'P' , 'Q' , 'R' , 'S' , 'T' , 'DI DALAM' } ;



vektor < arang > :: iterator ituB = vtr. mulai ( ) ;

++ ituB ;

vektor < arang > :: iterator ituE = vtr. akhir ( ) ;

-- ituE ; -- ituE ;



vektor < arang > :: iterator dia = vtr. menghapus ( ituB, ituE ) ;



untuk ( ke dalam Saya = 0 ; Saya < vtr. ukuran ( ) ; Saya ++ ) {

cout << vtr [ Saya ] << ' ' ;

}

cout << akhir ;



cout << * dia << akhir ;



kembali 0 ;

}

Outputnya adalah:

PTU

T

'Q', 'R', 'S' telah dihapus. Iterator yang dikembalikan sekarang menunjuk ke 'T', yang merupakan elemen terakhir dalam rentang penampung. Fungsi anggota, end(), mengembalikan sebuah iterator yang menunjuk tepat setelah elemen terakhir dari vektor. Dalam kodenya, iterator ini dikurangi dua kali untuk menunjuk ke 'T', elemen terakhir dari rentang tersebut. 'Q', 'R', 'S' dihapus tanpa elemen terakhir, 'T' dalam rentang tersebut, dengan ekspresi, “vtr.erase(itB, itE)”.

const vektor dan hapus()

Jika deklarasi suatu vektor didahului dengan const sebagai konstanta, maka tidak ada satu pun elemen vektor yang dapat dihapus. Program berikut tidak dapat dikompilasi, mengeluarkan pesan kesalahan untuk ekspresi a.erase(q):

#termasuk

#termasuk

menggunakan ruang nama std ;



ke dalam utama ( )

{

konstanta vektor < arang > vtr = { 'P' , 'Q' , 'R' , 'S' , 'T' , 'DI DALAM' } ;



vektor < arang > :: const_iterator mengulangi = vtr. mulai ( ) ;

++ mengulangi ; ++ mengulangi ;



vektor < arang > :: const_iterator dia = vtr. menghapus ( mengulangi ) ;



untuk ( ke dalam Saya = 0 ; Saya < vtr. ukuran ( ) ; Saya ++ ) {

cout << vtr [ Saya ] << ' ' ;

}

cout << akhir ;



cout << * dia << akhir ;



kembali 0 ;

}

Jika pembaca mencoba program tersebut, dia akan menerima pesan kesalahan. Program tidak akan dapat dikompilasi.

Program berikut tidak dapat dikompilasi, mengeluarkan pesan kesalahan untuk ekspresi a.erase(q1,q2):

#termasuk

#termasuk

menggunakan ruang nama std ;



ke dalam utama ( )

{

konstanta vektor < arang > vtr = { 'P' , 'Q' , 'R' , 'S' , 'T' , 'DI DALAM' } ;



vektor < arang > :: const_iterator ituB = vtr. mulai ( ) ;

++ ituB ;

vektor < arang > :: const_iterator ituE = vtr. akhir ( ) ;

-- ituE ; -- ituE ;



vektor < arang > :: const_iterator dia = vtr. menghapus ( ituB, ituE ) ;



untuk ( ke dalam Saya = 0 ; Saya < vtr. ukuran ( ) ; Saya ++ ) {

cout << vtr [ Saya ] << ' ' ;

}

cout << akhir ;



cout << * dia << akhir ;



kembali 0 ;

}

Catatan: erase() menghapus sebuah elemen atau serangkaian elemen. Sebenarnya, ini menandai suatu elemen sebagai dihapus, sehingga lokasi memorinya dapat digunakan oleh kode lain. Jika lokasi memori suatu elemen belum diambil oleh kode lain, maka elemen tersebut masih dapat digunakan kembali atas nama vektor yang sama.

pop_back()

Fungsi anggota vektor pop_back() adalah sejenis fungsi Erase(). Namun, ini hanya menghapus elemen terakhir dari vektor. Sintaksnya adalah:

ruang kosong pop_back ( )

Tidak memerlukan argumen dan mengembalikan batal. Program berikut mengilustrasikan penggunaannya:

#termasuk

#termasuk

menggunakan ruang nama std ;



ke dalam utama ( )

{

vektor < arang > vtr = { 'P' , 'Q' , 'R' , 'S' , 'T' , 'DI DALAM' } ;



vtr. pop_back ( ) ;



untuk ( ke dalam Saya = 0 ; Saya < vtr. ukuran ( ) ; Saya ++ ) {

cout << vtr [ Saya ] << ' ' ;

}

cout << akhir ;



kembali 0 ;

}

Outputnya adalah:

PQRST

Elemen terakhir, ‘U’ telah dihilangkan (terhapus).

Menghancurkan Vektor

Apakah suatu vektor dapat dimusnahkan? - Ya! Namun, ketika sebuah vektor dimusnahkan, semua elemennya terhapus kecuali namanya; artinya deklarasi vektor masih dapat digunakan kembali, tetapi dengan beberapa ketidakpastian. Sintaks untuk memusnahkan suatu vektor adalah:

a.~X ( )

dimana 'a' adalah nama vektornya. Program berikut menggambarkan hal ini:

#termasuk

#termasuk

menggunakan ruang nama std ;



ke dalam utama ( )

{

vektor < arang > vtr = { 'P' , 'Q' , 'R' , 'S' , 'T' , 'DI DALAM' } ;



vtr.~vektor ( ) ;



vtr = { 'DI DALAM' , 'DI DALAM' , 'X' , 'DAN' , 'DENGAN' } ;



untuk ( ke dalam Saya = 0 ; Saya < vtr. ukuran ( ) ; Saya ++ ) {

cout << vtr [ Saya ] << ' ' ;

}

cout << akhir ;



vtr.~vektor ( ) ;



vtr. dorong_kembali ( 'A' ) ;

vtr. dorong_kembali ( 'B' ) ;

vtr. dorong_kembali ( 'C' ) ;

vtr. dorong_kembali ( 'D' ) ;

vtr. dorong_kembali ( 'DAN' ) ;



untuk ( ke dalam Saya = 0 ; Saya < vtr. ukuran ( ) ; Saya ++ ) {

cout << vtr [ Saya ] << ' ' ;

}

cout << akhir ;

kembali 0 ;

}

Outputnya adalah:

V W X Y Z
P ^ t e @ A  C D E

dari komputer penulis, dengan beberapa karakter yang tidak dapat diandalkan untuk baris kedua.

Kesimpulan

Fungsi anggota vektor clear() dapat dibandingkan dengan fungsi anggota vektor delete(). Mereka bukan pengganti. clear() menghapus semua elemen vektor. Sebenarnya, ini menandai semua elemen sebagai dihapus, sehingga lokasi memorinya dapat digunakan oleh kode lain. Jika lokasi memori suatu elemen belum diambil oleh kode lain, maka elemen tersebut masih dapat digunakan kembali atas nama vektor yang sama. erase() menghapus sebuah elemen atau serangkaian elemen. Sebenarnya, ini menandai suatu elemen sebagai dihapus, sehingga lokasi memori dapat diambil oleh kode lain. Jika lokasi memori elemen apa pun yang dihapus belum diambil oleh kode lain, maka elemen tersebut masih dapat digunakan kembali atas nama vektor yang sama. clear memiliki kemiripan dengan menghancurkan, ~X().