अंतिम अद्यतन:2026-10-12
STL string गहन विश्लेषण¶
जब हम C++ का उपयोग करते हैं, तो
कुछ निश्चित चौड़ाई वाली विशेष स्ट्रिंग भी हैं, जैसे std::u32string (अर्थात् std::basic_string
C++20 में char8_t पेश किया गया, जिसके साथ std::u8string (अर्थात् std::basic_string
C++11¶
C++11 स्टैंडर्ड के अंतर्गत, स्ट्रिंग प्रोसेसिंग मुख्य रूप से std::string क्लास पर निर्भर करती थी, जो डायनामिक रूप से मेमोरी आवंटित करने वाली स्ट्रिंग क्लास है। इसके अतिरिक्त, नई निश्चित-चौड़ाई वाली स्ट्रिंग टाइप्स जैसे std::u32string और std::u16string पेश की गईं, जिससे Unicode कैरेक्टर्स को संभालने के लिए बेहतर समर्थन मिला।
#include <iostream>
#include <string>
int main() {
// 使用std::string
std::string str = "Hello, C++11!";
// 使用std::u32string和std::u16string
std::u32string u32str = U"Hello, Unicode!";
std::u16string u16str = u"Hello, Unicode!";
std::cout << str << std::endl;
std::wcout << u32str << std::endl;
std::wcout << u16str << std::endl;
return 0;
}
C++17¶
C++17 में
यह उन फंक्शन्स में विशेष रूप से उपयोगी है जहाँ स्ट्रिंग को पढ़ना हो पर संशोधित न करना हो। फंक्शन के लिए स्ट्रिंग की प्रतिलिपि बनाने के विपरीत, हम केवल मौजूदा स्ट्रिंग को देख सकते हैं! इसके अलावा,
#include <iostream>
#include <string>
#include <string_view>
void printString(std::string_view str) {
std::cout << str << std::endl;
}
int main() {
std::string_view strv{"strv"}; // C++ string_view
printString(strv);
std::string str{"str"}; // C++ string
printString(str);
char cstr[] = "cstr"; // C-style string
printString(cstr);
return 0;
}
आउटपुट:
इस उदाहरण में printString फंक्शन std::string_view को पैरामीटर के रूप में लेता है, जिससे यह फंक्शन अत्यंत हल्का और लचीला बन जाता है, क्योंकि किसी स्ट्रिंग की कोई प्रतिलिपि नहीं बनाई जाती; इस फंक्शन का उपयोग C तथा C++ शैली की स्ट्रिंग्स पास करके विभिन्न तरीकों से किया जा सकता है।
C++20¶
C++20 में कुछ नए उपयोगी मेंबर फंक्शन्स पेश किए गए, जिनमें starts_with(…) और ends_with(…) शामिल हैं। नाम के अनुसार, ये फंक्शन निर्धारित करते हैं कि कोई स्ट्रिंग (या स्ट्रिंग view) किसी कैरेक्टर या किसी std::string_view से शुरू/समाप्त होती है या नहीं। एक सरल उदाहरण:
#include <cassert>
#include <string>
#include <string_view>
int main() {
const std::string str{"Hello World!"};
assert(str.starts_with('H'));
assert(str.ends_with('!'));
assert(str.starts_with("Hello")); // 隐式转换为std::string_view
assert(str.ends_with("World!")); // 隐式转换为std::string_view
return 0;
}
C++23¶
C++23 में contains पेश किया गया, जो जाँचने के लिए है कि स्ट्रिंग में निर्दिष्ट सबस्ट्रिंग शामिल है या नहीं।
// 这是一个假设的C++23示例,实际上并不可用
#include <iostream>
#include <string>
int main() {
std::string str = "C++23 introduces contains function.";
if (str.contains("introduces")) {
std::cout << "The string contains 'introduces'." << std::endl;
} else {
std::cout << "The string does not contain 'introduces'." << std::endl;
}
return 0;
}
https://en.cppreference.com/w/cpp/string/basic_string/contains
निष्कर्ष¶
नए C++ कोड में स्ट्रिंग्स से काम करते समय, कोड को यथासंभव लचीला और मेमोरी-कुशल बनाने पर विचार करना चाहिए।
संबंधित विषय¶
- STL array सोर्स कोड विश्लेषण | C++那些事
- STL string इंटरव्यू प्रश्न विस्तृत व्याख्या | C++那些事
- STL deque सोर्स कोड विश्लेषण | C++那些事
- STL खाली बेस क्लास ऑप्टिमाइज़ेशन EBO | C++那些事
- STL स्वहस्त लिखी हैश तालिका कार्यान्वयन | C++那些事
- STL hashtable हैश तालिका | C++那些事
- STL इटरेटर सोर्स कोड विश्लेषण | C++那些事
- STL list सोर्स कोड विश्लेषण | C++那些事
- STL map तथा multimap | C++那些事
- STL queue तथा stack सोर्स कोड विश्लेषण | C++那些事