Yükleniyor...

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:

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

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?


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