Tampilan String di C++

Tampilan String Di C



Dalam domain pemrograman C++, memprioritaskan efisiensi dan kinerja sangatlah penting. Kelas “std::string_view”, diperkenalkan di C++17, menghadirkan alternatif serbaguna dan hemat memori dibandingkan manipulasi string tradisional. Pada intinya, “std::string_view” adalah referensi non-pemilik ke rangkaian karakter, biasanya mewakili substring dari string yang lebih besar. Tidak seperti “std::string” yang memiliki datanya dan mengelola memori secara internal, “std::string_view” beroperasi tanpa memiliki data yang mendasarinya. Karakteristik ini membuatnya sangat berharga untuk skenario di mana overhead penyalinan atau pengelolaan memori tidak diinginkan. Pada artikel ini, kita akan mengeksplorasi berbagai contoh untuk memahami penggunaan “std::string_view” di C++.

Contoh 1: Penanganan String yang Efisien

Dalam pengembangan C++ modern, penanganan string yang efisien sangat penting untuk mengoptimalkan kinerja dan pemanfaatan sumber daya. Hal ini memungkinkan akses dan manipulasi string yang efisien tanpa memerlukan realokasi atau duplikasi memori. Untuk mengilustrasikan konsep ini, mari kita pelajari contoh praktisnya.







Perhatikan cuplikan kode berikut:



#termasuk
#termasuk

batalkan prosesStringView ( std::string_view strView ) {

std::cout << 'Panjang: ' << strView.panjang ( ) << std::endl;
std::cout << 'Isi: ' << strView << std::endl;
}

ke utama ( ) {

std::string string asli = 'Penanganan Senar yang Efisien' ;

std::string_view viewOfString ( String asli ) ;

prosesStringView ( viewOfString ) ;

kembali 0 ;
}


Dalam contoh ini, kita memiliki fungsi “processStringView” yang menggunakan “std::string_view” sebagai parameternya. Fungsi tersebut kemudian mencetak panjang dan isi tampilan string menggunakan output standar. Fungsi utama menginisialisasi “std::string” bernama “originalString” dengan nilai “Penanganan String Efisien”. Selanjutnya, “std::string_view” bernama 'viewOfString” dibuat, mengacu pada konten “originalString”.



Dengan meneruskan “viewOfString” ke fungsi “processStringView”, kita dapat melakukan operasi pada string secara efisien, sehingga menghilangkan kebutuhan alokasi memori tambahan. “std::string_view” adalah referensi ringan ke urutan karakter dasar “originalString” tanpa menyalin data.





Berikut adalah output yang dihasilkan:



Contoh 2: Interoperabilitas dengan Kode Lama

Dalam bidang pengembangan C++, integrasi yang mulus antara basis kode baru dan lama sering kali menjadi perhatian penting. “std::string_view” memungkinkan pengembang untuk berinteraksi dengan mudah dengan fungsi lama yang mengembalikan pointer “const char”.

Perhatikan contoh berikut yang menunjukkan penggunaan praktis “std::string_view” untuk interoperabilitas. Di sini, kita memiliki fungsi lama bernama “legacyFunction()” yang mengembalikan pointer “const char”:

#termasuk
#termasuk

karakter konstan * fungsi warisan ( ) {
kembali 'Benang Warisan' ;
}

ke utama ( ) {

std::string_view warisanStrView ( fungsi warisan ( ) ) ;

std::cout << 'Tampilan String Lama:' << warisanStrView << std::endl;

kembali 0 ;
}


Kita mulai dengan mendefinisikan fungsi warisan bernama “legacyFunction()” yang mengembalikan pointer “const char” yang mewakili string yang diberi label sebagai “Legacy String”. Untuk menggabungkan data lama ini dengan lancar ke dalam program C++ modern kami, kami menggunakan “std::string_view”. Khususnya pada fungsi main(), kita membuat instance “std::string_view” bernama “legacyStrView” dan menginisialisasinya dengan hasil dari fungsi legacy. Instansiasi ini memungkinkan kita merangkum dan bekerja secara efisien dengan penunjuk “const char” yang lama.

Hasilnya, kami dapat mengakses dan memanipulasi string lama tanpa harus menyalin data yang tidak perlu, sehingga menjaga efisiensi dan kompatibilitas. Langkah terakhir dalam kode ini melibatkan penggunaan “std::cout” untuk mencetak konten tampilan string lama.

Output yang dieksekusi adalah:

Contoh 3: Peningkatan Penanganan String Literal

Literal string dalam C++ secara tradisional direpresentasikan sebagai array karakter. “std::string_view” menyederhanakan pekerjaan dengan literal string dengan menyediakan antarmuka yang nyaman. Dengan mengizinkan akses langsung ke array karakter yang mendasarinya tanpa memerlukan konversi eksplisit, “std::string_view” menyederhanakan operasi pada literal string.

#termasuk
#termasuk

ke utama ( ) {
karakter konstan * myLiteral = 'Halo, Tampilan String!' ;
std::string_view tampilan literal ( myLiteral ) ;

std::cout << 'Karakter pertama:' << tampilan literal [ 0 ] << std::endl;

size_t posisi = literalView.find ( 'Rangkaian' ) ;
std::cout << 'Posisi substring:' << posisi << std::endl;

kembali 0 ;
}


Dalam contoh ini, pesan “Halo, Tampilan String!” string literal ditugaskan ke penunjuk 'myLiteral'. Pengenalan “std::string_view” memfasilitasi representasi string ini secara lebih efisien tanpa perlu menyalin isinya. Objek “literalView” dibuat menggunakan penunjuk “myLiteral” yang memungkinkan kita melihat dan memanipulasi urutan karakter yang mendasarinya.

Penggunaan “std::string_view” memberikan akses mudah ke masing-masing karakter dalam string. Dalam cuplikan kode, “literalView[0]” mengambil dan mencetak karakter pertama string, menampilkan kesederhanaan dan keterusterangan dalam mengakses elemen. Metode “find” dari “std::string_view” digunakan untuk menentukan posisi substring “String” dalam string asli.

Contoh 4: Ekstraksi Substring

Tugas ekstraksi substring melibatkan pengambilan sebagian string tertentu berdasarkan kriteria tertentu seperti posisi pembatas. Kemampuan untuk mengekstrak substring dengan mudah adalah fitur canggih dari “std::string_view”. Pertimbangkan skenario di mana kita perlu mengekstraksi sebagian string berdasarkan pembatas:

#termasuk
#termasuk

ke utama ( ) {
std::string string penuh = 'apel-jeruk-pisang' ;
size_t pembatasPos = fullString.find ( '-' ) ;

std::string_view subString = fullString.substr ( 0 , pembatasPos ) ;

std::cout << 'Substring yang Diekstraksi:' << subString << std::endl;

kembali 0 ;
}


Dalam cuplikan kode ini, kita mulai dengan deklarasi string asli, “fullString”, yang diinisialisasi dengan nilai “apple-orange-banana”. Tujuan kami adalah melakukan ekstraksi substring. Untuk mencapai hal ini, kami menggunakan fungsi “find” yang disediakan oleh perpustakaan standar C++.

Setelah kami mengidentifikasi posisi pembatas dalam “fullString”, yang disimpan dalam variabel “delimiterPos”, kami mengekstrak substring yang diinginkan. Fungsi “substr” dipanggil pada string asli, menentukan posisi awal (0) dan panjang substring yang merupakan posisi pembatas. Operasi ini menghasilkan pembuatan “std::string_view” bernama “subString” yang mewakili bagian string asli dari awal hingga pembatas.

Contoh 5: Struktur Data Hemat Memori

“std::string_view” memainkan peran penting dalam merancang struktur data hemat memori. Daripada menyimpan banyak salinan string, struktur data dapat menyimpan instance “std::string_view”, sehingga mengurangi overhead memori.

#termasuk
#termasuk

struct Rekam {
std::string_view nama;
ke dalam usia;
} ;

ke utama ( ) {

Rekam orang = { 'John Doe' , 30 } ;

std::cout << 'Nama:' << orang.nama << ', Usia: ' << tokoh << std::endl;

kembali 0 ;
}


Dalam cuplikan kode ini, kami menampilkan pemanfaatan “std::string_view” dalam struktur data hemat memori. Kami mendefinisikan struktur “Record” yang terdiri dari anggota “std::string_view” bernama “name” dan anggota integer yang disebut “age”. Penggunaan “std::string_view” dalam konteks ini memungkinkan kita membuat representasi string yang ringan tanpa memerlukan alokasi memori tambahan.

Dalam fungsi 'utama', kita membuat instance objek 'Rekam' bernama 'orang' dengan nama 'John Doe' dan berusia 30 tahun. 'Nama' anggota 'std::string_view' berfungsi sebagai tampilan yang tidak memiliki data karakter yang sesuai dengan namanya, menghilangkan kebutuhan untuk menduplikasi konten string. “std::cout << “Nama: ” << person.name << “, Usia: ” << person.age << std::endl;” pernyataan menampilkan nama dan usia orang yang disimpan dalam objek 'Record'.

Kesimpulan

Dalam lanskap pengembangan C++ yang terus berkembang, “std::string_view” menonjol sebagai tambahan yang berharga untuk perangkat programmer. Contoh yang diilustrasikan dalam artikel ini menyoroti kemampuan beradaptasi dan kegunaan “std::string_view” dalam bidang pemrograman C++. Dari manipulasi string yang efisien dan interoperabilitas yang lancar dengan kode lama hingga struktur data yang hemat memori, “std::string_view” sangat berharga bagi pengembang yang mencari peningkatan kinerja dan kode yang dioptimalkan dalam beragam skenario. Skenario dunia nyata ini menunjukkan bagaimana “std::string_view” dapat mengoptimalkan kode, mengurangi overhead memori yang tidak perlu, dan berkontribusi pada efisiensi aplikasi C++ secara keseluruhan.