C++ string_view ile Hafif String İşlemleri
C++ std::string_view kullanımını öğrenin. Kopyalama yapmadan hızlı ve verimli string işlemleri gerçekleştirmeyi örneklerle keşfedin.
C++17 ile birlikte gelen std::string_view, bir metnin kopyalanmadan kullanılmasını sağlayan,
hafif ve yüksek performanslı bir string temsilidir.
Geleneksel std::string ile karşılaştırıldığında, string_view çok daha hızlıdır çünkü veri kopyalamaz,
yalnızca mevcut bir karakter dizisi üzerinde bir görünüm (view) oluşturur.
Bu makalede string_view’in avantajları, kullanım alanları ve önemli dikkat noktaları detaylı bir şekilde anlatılmaktadır.
1) string_view Nedir?
std::string_view, bir string’in tümünü veya bir kısmını kopyalamadan temsil eden bir yapıdır. İçinde yalnızca iki bilgi bulunur:
- Metnin başlangıç adresi
- Metnin uzunluğu
Yani string_view, veriye sahip olmaz — sadece işaret eder.
#include <string_view>
#include <iostream>
using namespace std;
int main() {
string text = "Merhaba Dünya";
string_view sv = text;
cout << sv << endl;
}
2) string_view'in Performans Avantajı
std::string → Kopyalama yapar
Kopyalama maliyetlidir, özellikle büyük metinlerde.
std::string_view → Kopyalama yapmaz
Sadece pointer + length tutar. Bu nedenle çok hızlıdır ve özellikle parsing, log okuma, konfigürasyon çözümleme gibi işlemler için idealdir.
3) string_view ile Alt String Alma
string_view sv = "C++ Programlama Dili";
auto first = sv.substr(0, 3); // "C++"
auto second = sv.substr(4, 11); // "Programlama"
cout << first << " | " << second;
4) Boşluk Kırpma (trim) Örneği
string_view trim(string_view sv) {
while (!sv.empty() && isspace(sv.front()))
sv.remove_prefix(1);
while (!sv.empty() && isspace(sv.back()))
sv.remove_suffix(1);
return sv;
}
int main() {
string_view text = " Merhaba ";
string_view cleaned = trim(text);
cout << "[" << cleaned << "]";
}
Çıktı: [Merhaba]
5) string_view ile Bölme (split) İşlemi
#include <vector>
vector<string_view> split(string_view sv, char delimiter) {
vector<string_view> parts;
size_t start = 0;
while (true) {
size_t pos = sv.find(delimiter, start);
if (pos == string_view::npos) {
parts.push_back(sv.substr(start));
break;
}
parts.push_back(sv.substr(start, pos - start));
start = pos + 1;
}
return parts;
}
int main() {
string_view text = "cpp,java,python";
auto parts = split(text, ',');
for (auto p : parts)
cout << p << endl;
}
6) string_view Kullanırken Dikkat Edilmesi Gerekenler
- Tehlike: string_view veriye sahip değildir.
- Bu nedenle: işaret ettiği veri yok olursa string_view artık geçersiz olur.
Geçersiz Kullanım Örneği
string_view danger() {
string temp = "Merhaba"; // fonksiyon sonunda yok olacak!
return temp; // TEHLİKELİ!
}
Sonuç: undefined behavior.
Doğru Kullanım
string globalText = "Güvenli";
string_view sv = globalText; // güvenli
7) string_view ile Karşılaştırma (compare)
string_view a = "cpp";
string_view b = "cpp";
if (a == b)
cout << "Esit";
string_view, içeriği doğrudan karşılaştırabilir.
8) Uygulamalı Örnek — Komut Ayrıştırma
void parseCommand(string_view cmd) {
if (cmd.starts_with("add"))
cout << "Ekleme komutu";
else if (cmd.starts_with("delete"))
cout << "Silme komutu";
}
int main() {
parseCommand("add user");
}
9) Ne Zaman string_view Kullanılır?
- Büyük metinlerle çalışırken
- Alt string işlemleri yaparken
- Metni kopyalamak istemediğiniz durumlarda
- Performansın kritik olduğu uygulamalarda
10) TL;DR
- string_view: kopyalamayan hafif metin yapısıdır.
- Alt string alma işlemleri çok hızlıdır.
- Veriyi sahiplenmez — işaret ettiği veri yok olursa geçersiz olur.
- Parsing, log analizi gibi işlemlerde idealdir.
- Tüm örnekler Visual Studio 2022 ve GCC ile uyumludur.
İlişkili Makaleler
C++ Fonksiyonlara Giriş: Tanımlama, Çağırma, Parametreler
C++ fonksiyonlarını öğrenin. Fonksiyon tanımlama, çağırma ve parametre kullanımıyla modüler programlama örnekleri keşfedin.
C++ Standard Library'ye Genel Bakış
C++ Standard Library'yi öğrenin. STL bileşenleri, konteynerler, algoritmalar ve modern C++ geliştirmede temel kütüphaneleri keşfedin.
C++ String İşlemleri: C-Style ve std::string
C++’ta C-Style stringler ve std::string kullanımını öğrenin. Metin işleme, birleştirme ve karakter işlemleri örneklerle anlatılıyor.