Paparan Rentetan dalam C++

Paparan Rentetan Dalam C



Dalam domain pengaturcaraan C++, mengutamakan kecekapan dan prestasi adalah penting. Kelas 'std::string_view', yang diperkenalkan dalam C++17, mempersembahkan alternatif yang serba boleh dan cekap memori kepada manipulasi rentetan tradisional. Pada terasnya, 'std::string_view' ialah rujukan bukan milik kepada jujukan aksara, biasanya mewakili subrentetan rentetan yang lebih besar. Tidak seperti 'std::string' yang memiliki datanya dan mengurus memori secara dalaman, 'std::string_view' beroperasi tanpa memiliki data asas. Ciri ini menjadikannya sangat berharga untuk senario di mana overhed menyalin atau mengurus memori adalah tidak diingini. Dalam artikel ini, kami akan meneroka contoh yang berbeza untuk memahami penggunaan 'std::string_view' dalam C++.

Contoh 1: Pengendalian Rentetan yang Cekap

Dalam pembangunan C++ moden, pengendalian rentetan yang cekap adalah penting untuk mengoptimumkan prestasi dan penggunaan sumber. Ia membenarkan capaian dan manipulasi rentetan yang cekap tanpa memerlukan pengagihan semula atau penduaan memori. Untuk menggambarkan konsep ini, mari kita mendalami contoh praktikal.







Pertimbangkan coretan kod berikut:



#include
#include

void processStringView ( std::string_view strView ) {

std::cout << 'Panjang:' << strView.length ( ) << std::endl;
std::cout << 'Kandungan: ' << strView << std::endl;
}

int utama ( ) {

std::string originalString = 'Pengendalian Rentetan yang Cekap' ;

std::string_view viewOfString ( originalString ) ;

processStringView ( viewOfString ) ;

kembali 0 ;
}


Dalam contoh ini, kami mempunyai fungsi 'processStringView' yang mengambil 'std::string_view' sebagai parameternya. Fungsi itu kemudian mencetak panjang dan kandungan paparan rentetan menggunakan output standard. Fungsi utama memulakan 'std::string' bernama 'originalString' dengan nilai 'Efficient String Handling'. Selepas itu, 'std::string_view' bernama 'viewOfString' dicipta, merujuk kepada kandungan 'originalString'.



Dengan menghantar 'viewOfString' kepada fungsi 'processStringView', kami boleh melaksanakan operasi pada rentetan dengan cekap, menghapuskan keperluan untuk peruntukan memori tambahan. 'std::string_view' ialah rujukan ringan kepada jujukan aksara asas 'originalString' tanpa menyalin data.





Berikut ialah output yang dihasilkan:



Contoh 2: Saling kendali dengan Kod Warisan

Dalam bidang pembangunan C++, penyepaduan lancar pangkalan kod baharu dan lama sering menjadi kebimbangan kritikal. 'std::string_view' membolehkan pembangun berinteraksi dengan mudah dengan fungsi warisan yang mengembalikan penunjuk 'const char'.

Pertimbangkan contoh berikut yang menunjukkan penggunaan praktikal 'std::string_view' untuk saling kendali. Di sini, kami mempunyai fungsi warisan bernama 'legacyFunction()' yang mengembalikan penunjuk 'const char':

#include
#include

const char * legacyFunction ( ) {
kembali 'Rentetan Legasi' ;
}

int utama ( ) {

std::string_view legacyStrView ( legacyFunction ( ) ) ;

std::cout << 'Pandangan Rentetan Warisan: ' << legacyStrView << std::endl;

kembali 0 ;
}


Kita mulakan dengan mentakrifkan fungsi warisan bernama 'legacyFunction()' yang mengembalikan penunjuk 'const char' yang mewakili rentetan yang dilabelkan sebagai 'String Legacy'. Untuk memasukkan data warisan ini dengan lancar ke dalam program C++ moden kami, kami menggunakan 'std::string_view'. Dalam fungsi main(), khususnya, kami mencipta contoh 'std::string_view' bernama 'legacyStrView' dan memulakannya dengan hasil fungsi warisan. Instalasi ini membolehkan kami merangkum dan bekerja dengan cekap dengan penunjuk 'const char' warisan.

Akibatnya, kami boleh mengakses dan memanipulasi rentetan warisan tanpa menggunakan penyalinan data yang tidak perlu, mengekalkan kecekapan dan keserasian. Langkah terakhir dalam kod melibatkan penggunaan 'std::cout' untuk mencetak kandungan paparan rentetan warisan.

Output yang dilaksanakan ialah:

Contoh 3: Pengendalian Literal Rentetan yang Diperbaiki

Literal rentetan dalam C++ secara tradisinya diwakili sebagai tatasusunan aksara. 'std::string_view' memudahkan kerja dengan literal rentetan dengan menyediakan antara muka yang mudah. Dengan membenarkan akses terus kepada tatasusunan aksara asas tanpa memerlukan penukaran eksplisit, 'std::string_view' menyelaraskan operasi pada literal rentetan.

#include
#include

int utama ( ) {
const char * myLiteral = 'Hello, String View!' ;
std::string_view literalView ( myLiteral ) ;

std::cout << 'Watak pertama:' << literalView [ 0 ] << std::endl;

saiz_t kedudukan = literalView.find ( 'Tali' ) ;
std::cout << 'Kedudukan subrentetan: ' << kedudukan << std::endl;

kembali 0 ;
}


Dalam contoh ini, 'Hello, String View!' literal rentetan diberikan kepada penunjuk 'myLiteral'. Pengenalan 'std::string_view' memudahkan perwakilan yang lebih cekap bagi rentetan ini tanpa perlu menyalin kandungannya. Objek 'literalView' dicipta menggunakan penuding 'myLiteral' yang membolehkan kami melihat dan memanipulasi jujukan aksara asas.

Penggunaan 'std::string_view' menyediakan akses mudah kepada aksara individu dalam rentetan. Dalam coretan kod, 'literalView[0]' mendapatkan semula dan mencetak aksara pertama rentetan, mempamerkan kesederhanaan dan keterusterangan mengakses elemen. Kaedah 'cari' 'std::string_view' digunakan untuk menentukan kedudukan subrentetan 'String' dalam rentetan asal.

Contoh 4: Pengekstrakan Substring

Tugas pengekstrakan subrentetan melibatkan mendapatkan semula sebahagian daripada rentetan yang diberikan berdasarkan kriteria yang ditentukan seperti kedudukan pembatas. Keupayaan untuk mengekstrak subrentetan dengan mudah ialah ciri hebat 'std::string_view'. Pertimbangkan senario di mana kita perlu mengekstrak sebahagian daripada rentetan berdasarkan pembatas:

#include
#include

int utama ( ) {
std::string fullString = 'epal-oren-pisang' ;
size_t delimiterPos = fullString.find ( '-' ) ;

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

std::cout << 'Rentetan yang diekstrak: ' << subString << std::endl;

kembali 0 ;
}


Dalam coretan kod ini, kita bermula dengan pengisytiharan rentetan asal, 'fullString', yang dimulakan dengan nilai 'epal-oren-pisang'. Matlamat kami adalah untuk melakukan pengekstrakan subrentetan. Untuk mencapai matlamat ini, kami menggunakan fungsi 'cari' yang disediakan oleh perpustakaan standard C++.

Sebaik sahaja kami mengenal pasti kedudukan pembatas dalam 'fullString', yang disimpan dalam pembolehubah 'delimiterPos', kami mengekstrak subrentetan yang dikehendaki. Fungsi 'substr' dipanggil pada rentetan asal, menyatakan kedudukan permulaan (0) dan panjang subrentetan yang tepat adalah kedudukan pembatas. Operasi ini menghasilkan penciptaan 'std::string_view' bernama 'subString' yang mewakili bahagian rentetan asal dari awal hingga pembatas.

Contoh 5: Struktur Data Cekap Memori

'std::string_view' memainkan peranan penting dalam mereka bentuk struktur data yang cekap memori. Daripada menyimpan berbilang salinan rentetan, struktur data boleh menyimpan kejadian 'std::string_view', sekali gus mengurangkan overhed memori.

#include
#include

struct Rekod {
std::string_view name;
umur int;
} ;

int utama ( ) {

Orang rekod = { 'John Doe' , 30 } ;

std::cout << 'Nama:' << orang.nama << ', Umur: ' << orang.umur << std::endl;

kembali 0 ;
}


Dalam coretan kod ini, kami mempamerkan penggunaan 'std::string_view' dalam struktur data yang cekap memori. Kami mentakrifkan struktur 'Rekod' yang terdiri daripada ahli 'std::string_view' bernama 'nama' dan ahli integer dipanggil 'umur'. Penggunaan 'std::string_view' dalam konteks ini membolehkan kami mencipta perwakilan ringan rentetan tanpa memerlukan peruntukan memori tambahan.

Dalam fungsi 'utama', kami membuat seketika objek 'Rekod' bernama 'orang' dengan nama 'John Doe' dan berumur 30 tahun. 'Nama' ahli 'std::string_view' berfungsi sebagai pandangan bukan milik bagi data aksara yang sepadan dengan nama, menghapuskan keperluan untuk menduplikasi kandungan rentetan. “std::cout << “Nama: ” << orang. nama << “, Umur: ” << orang. umur << std::endl;” pernyataan mengeluarkan nama dan umur orang yang disimpan dalam objek 'Rekod'.

Kesimpulan

Dalam landskap pembangunan C++ yang sentiasa berkembang, 'std::string_view' menonjol sebagai tambahan yang berharga kepada kit alat pengaturcara. Contoh yang digambarkan dalam artikel ini menyerlahkan kebolehsuaian dan utiliti 'std::string_view' dalam bidang pengaturcaraan C++. Daripada manipulasi rentetan yang cekap dan kebolehoperasian yang lancar dengan kod warisan kepada struktur data yang cekap memori, 'std::string_view' adalah berharga untuk pembangun yang mencari prestasi yang dipertingkatkan dan kod yang dioptimumkan dalam pelbagai senario. Senario dunia sebenar ini menunjukkan bagaimana 'std::string_view' boleh mengoptimumkan kod, mengurangkan overhed memori yang tidak diperlukan dan menyumbang kepada kecekapan keseluruhan aplikasi C++.