国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

C++ string的深入理解

darkbaby123 / 1952人閱讀

摘要:迭代器返回一個迭代器,該迭代器指向字符串結束字符的過去部分。不得取消對其的引用。如果字符串對象是限定的,則函數返回一個迭代器。此值在字符串的成員函數中用作或參數的值時,表示直到字符串結束。

String類介紹
string的文檔介紹

  1. 字符串是表示字符序列的類
  2. 標準的字符串類提供了對此類對象的支持,其接口類似于標準字符容器的接口,但添加了專門用于操作
    單字節字符字符串的設計特性。
  3. string類是使用char(即作為它的字符類型,使用它的默認char_traits和分配器類型(關于模板的更多信
    息,請參閱basic_string)。
  4. string類是basic_string模板類的一個實例,它使用char來實例化basic_string模板類,并用char_traits
    和allocator作為basic_string的默認參數(根于更多的模板信息請參考basic_string)。
  5. 注意,這個類獨立于所使用的編碼來處理字節:如果用來處理多字節或變長字符(如UTF-8)的序列,這個
    類的所有成員(如長度或大小)以及它的迭代器,將仍然按照字節(而不是實際編碼的字符)來操作。
    總結:
    1. string是表示字符串的字符串類
    2. 該類的接口與常規容器的接口基本相同,再添加了一些專門用來操作string的常規操作。
      比特科技
    3. string在底層實際是:basic_string模板類的別名,typedef basic_stringstring;
    4. 不能操作多字節或者變長字符的序列。在使用string類時,必須包含#include頭文件以及using namespace std;

一、String的構造方法
string構造方法文檔介紹

這是文檔對string對的構造方法地描述,以下是對string構造函數地具體說明。

string() 構造空的string類對象,即空字符串
string(const char* s) 用C-string來構造string類對象
string(size_t n, char c) string類對象中包含n個字符c
string(const string&s) 拷貝構造函數

void text() {	string str;	string s("123456789");	string ss(8, "a");	string st(s);	cout << str << endl;	cout << s << endl;	cout << ss << endl;	cout << st << endl;}


箭頭標出來的是空字符串,s通過拷貝構造把值傳給了str,只不過值空字符串。

二、string容量操作介紹

size 返回字符串有效字符長度
length 返回字符串有效字符長度
capacity 返回空間總大小
empty 檢測字符串釋放為空串,是返回true,否則返回false
clear 清空有效字符
reserve 為字符串預留空間**
resize 將有效字符的個數該成n個,多出的空間用字符c填充

  1. size()和length():返回string對象的字符個數,他們執行效果相同。
  2. capacity():重新分配內存之前,string對象能包含的最大字符數

capacity表示為字符串預留空間的大小這是表示s1的預留空間大小為15而有效字符串長度為9.

empty檢測字符串釋放為空串當s1不是空串是輸出的是0,當執行了clear()情況了字符串時empty檢測s1為空串輸出為1。

resize 將s1有效字符的個數該成10個輸出了size大小為10,size大小表示有效字符串的數。

size()與length()方法底層實現原理完全相同,引入size()的原因是為了與其他容器的接口保持一致,一般情況下基本都是用size()。
clear()只是將string中有效字符清空,不改變底層空間大小。
resize(size_t n) 與 resize(size_t n, char c)都是將字符串中有效字符個數改變到n個,不同的是當字 符個數增多時:resize(n)用0來填充多出的元素空間,resize(size_t
n, char c)用字符c來填充多出的 元素空間。注意:resize在改變元素個數時,如果是將元素個數增多,可能會改變底層容量的大小,如果是將元素個數減少,底層空間總大小不變。
reserve(size_t res_arg=0):為string預留空間,不改變有效元素個數,當reserve的參數小于string的底層空間總大小時,reserver不會改變容量大小

三、string類對象的訪問及遍歷操作

operator[] 返回pos位置的字符,const string類對象調用
begin+ end
begin獲取一個字符的迭代器 + end獲取最后一個字符下一個位置的迭代器
rbegin + rend
begin獲取一個字符的迭代器 + end獲取最后一個字符下一個位置的迭代器
范圍for C++11支持更簡潔的范圍for的新遍歷方式

文檔介紹:

1.operator[]方式
字符串中指定位置的字符。如果字符串對象是const限定的,則函數返回一個const char&。否則,它將返回一個字符&

通過for循環方式打印出數據這和數組遍歷打印數據差不了多少。
2.迭代器
返回一個迭代器,該迭代器指向字符串結束字符的過去部分。
結束字符后面的過去字符是字符串中最后一個字符后面的理論字符。不得取消對其的引用。
由于標準庫函數使用的范圍不包括其結束迭代器所指向的元素,因此此函數通常與string::begin結合使用,以指定包含字符串中所有字符的范圍。
如果對象是空字符串,則此函數返回與string::begin相同的值。
一個迭代器,指向字符串的末尾。
如果字符串對象是const限定的,則函數返回一個const_迭代器。否則,它將返回一個迭代器。
成員類型迭代器和常量迭代器是隨機訪問迭代器類型(分別指向字符和常量字符)。

void text() {	string s1("123456789");	string sss("123456");	for (int i = 0; i < s1.size(); i++) {		cout << s1[i] << " " ;	}	string::iterator it = s1.begin();	while (it != s1.end()) {		cout << *it << " ";		it++;	}}


3.反向迭代器
就是利用迭代器逆向輸出string中的數據

string::reverse_iterator it = s1.rbegin();	while (it != s1.rend()) {		cout << *it << " ";		it++;	}

這不是難實現,利用for循環也可以逆向打印數據。
4.范圍for
C++新標準提供的范圍for語句.這種語句遍歷給定序列中個元素并對序列中每一個值執行某種操作,其語法形式是:

for(declaration : expression)
statement

其中,expression 部分是一個對象,用于表示一個序列。declaration 部分負責定義一個變量,該變量將用于訪問序列中的基礎元素。每次迭代,declaration部分的變量會被初始化為expression部分的下一個元素值。

此例中通過使用auto關鍵字讓編譯器來決定變量o的類型,這里o的類型是char.每次迭代,s1的下一個字符被拷貝給o,因此該循環可以讀作“對于字符串str中的每個字符o,”執行某某操作。此例中的某某操作 即輸出一個字符,然后換行。

四、string的修改

push_back 在字符串后尾插字符c
append 在字符串后追加一個字符串
operator+= (重點) 在字符串后追加字符串str
c_str(重點) 返回C格式字符串
find + npos(重點) 從字符串pos位置開始往后找字符c,返回該字符在字符串中的位置
rfind 從字符串pos位置開始往前找字符c,返回該字符在字符串中的位置 substr
在str中從pos位置開始,截取n個字符,然后將其返回


push_back只能插入一個字符,而且不能插入字符串,而append不竟能插入字符,而且能插入字符串。
operator+= 在字符串后追加字符串str,這也是字符串修改中最常用的方法。
find:
find的文檔介紹

第一個匹配的第一個字符的位置。
如果未找到匹配項,則函數返回字符串::npos。
size_ t是無符號整數類型(與成員類型string::size_t類型相同)。

找到就返回它的位置,找不到返回-1,也有的地方說是npos這里npos意思是一至的。
文檔中是這樣介紹:

npos是一個靜態成員常量值,對于類型為size_t的元素,其值可能最大。
此值在字符串的成員函數中用作len(或sublen)參數的值時,表示“直到字符串結束”。
作為返回值,它通常用于指示不匹配。
此常量的定義值為-1,因為size_t是無符號整數類型,所以它是此類型的最大可能表示值。

substr:

這個例子是把s從第3個字符開始截取到npos也就是字符串末尾。
五、其他方法
operator+盡量少用,因為傳值返回,導致深拷貝效率低
拼接字符串

把兩個字符串拼接成一個字符串。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/123600.html

相關文章

  • JavaScript 程序員可以從C++中學到什么

    摘要:特別是所謂的不需要的引用可能會導致內存泄漏,這意味著程序占用的內存比實際需要的多,從而降低了內存的效率。但是如果我們能夠意識到內存泄漏的風險,就可以采取措施將其刪除。意外的使用全局變量是導致內存泄漏的一個常見原因。 作者:Bret Cameron翻譯:瘋狂的技術宅原文:https://medium.com/@bretcamer... 本文首發微信公眾號:前端先鋒歡迎關注,每天都給你...

    不知名網友 評論0 收藏0
  • 【修煉內功】[JVM] 深入理解JVM之ClassLoader

    摘要:本文已收錄修煉內功躍遷之路在誕生之初便提出,各提供商發布很多不同平臺的虛擬機,這些虛擬機都可以載入并執行同平臺無關的字節碼。設計者在第一版虛擬機規范中便承諾,時至今日,商業機構和開源機構已在之外發展出一大批可以在上運行的語言,如等。 本文已收錄【修煉內功】躍遷之路 Java在誕生之初便提出 Write Once, Run Anywhere,各提供商發布很多不同平臺的虛擬機,這些虛擬機...

    荊兆峰 評論0 收藏0
  • 從表到里學習JVM實現

    在社會化分工、軟件行業細分專業化的趨勢下,會真的參與到底層系統實現的人肯定是越來越少(比例上說)。真的會參與到JVM實現的人肯定是少數。 但如果您對JVM是如何實現的有興趣、充滿好奇,卻苦于沒有足夠系統的知識去深入,那么可以參考RednaxelaFX整理的這個書單。 showImg(http://segmentfault.com/img/bVbGzn); 本豆列的脈絡是:    1. JV...

    Cristic 評論0 收藏0
  • 系統地學習C++

    摘要:本書主要圍繞一系列逐漸復雜的程序問題,以及用以解決這些問題的語言特性展開講解。你不只學到的函數和結構,也會學習到它們的設計目的和基本原理。因此我們把精力集中在最有價值的地方。本書不僅是對模板的權威解釋,而且本書還深入地介紹了其他一般的思想。 C++ 入門教程(41課時) - 阿里云大學 C+...

    joyqi 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<