国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++精華鋪】9.STL string

這篇具有很好參考價值的文章主要介紹了【C++精華鋪】9.STL string。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1. string類的優(yōu)勢

2. string類的常用接口

2.1 常用構(gòu)造

1. 空串構(gòu)造:string();

2. C串構(gòu)造:string(const char* s);

3. 拷貝構(gòu)造:string(const string& str);

4. 字符填充構(gòu)造:string(size_t n, char c);

5. 迭代器構(gòu)造:string(InputIterator first, InputIterator last);

2.2 ?string容量操作

1. size_t size(),size_t length()

?2. size_t capacity() const

?3. bool empty() const

?4. void clear()

?5. void reserve(size_t n = 0)

?6. void resize(size_t n),?void resize(size_t char c)

2.3 類對象的訪問

1. char& operator[](size_t pos),const char& operator[](size_t pos) const

?2. begin()、end()

?3. rbegin()、rend()

2.4?string對象處理函數(shù)

1. push_back()

2. append()

?3. operator+=

?4. c_str()

?5. insert()

6. erase()

7. find()、rfind()

8. substr()

9. getline()


1. string類的優(yōu)勢

?????????STL(Standard Template Library)庫中的string類是一個字符串類,它提供了管理字符串的各種方法和功能。它是一個可變長度的字符序列,可以自動調(diào)整自身大小以適應(yīng)字符串的長度變化。

? ? ? ? 在之前我們操作字符串都是通過自己去實現(xiàn)相關(guān)的函數(shù)來進(jìn)行操作,而且稍不留神就會內(nèi)存泄漏,在C++中我們更傾向于使用string類來完成和字符串相關(guān)的操作。

????????使用string類相比于使用C語言的字符串有以下優(yōu)點:

  1. 更加安全:C語言的字符串沒有自帶長度信息,容易造成內(nèi)存越界等安全問題。而string類包含有字符串長度信息,能夠避免這類問題。

  2. 更加方便:C語言中處理字符串需要使用一系列函數(shù),如strlen、strcmp、strcat等等,使用起來比較繁瑣。而string類提供了一系列方法,如length、compare、append等等,使用起來更加直觀方便。

  3. 更加靈活:string類可以動態(tài)地改變字符串的長度,而C語言的字符串長度通常是固定的。

  4. 更加高效:string類內(nèi)部實現(xiàn)了很多優(yōu)化,如字符串復(fù)制采用了引用計數(shù)和寫時復(fù)制等技術(shù),因此性能相對于C語言的字符串更高。

2. string類的常用接口

2.1 常用構(gòu)造

? ? ? ? C++98中支持7種構(gòu)造函數(shù)?,如下:

  1. default (1)? string();
  2. copy(2) string(const string& str);
  3. substring(3) string(const string& str, size_t pos, size_t len = npos);
  4. from c - string(4) string(const char* s);
  5. from sequence(5) string(const char* s, size_t n);
  6. fill(6) string(size_t n, char c);
  7. range(7) template <class InputIterator>?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? string(InputIterator first, InputIterator last);

? ? ? ? ?但是我們只對其中的五個進(jìn)行講解:

1. 空串構(gòu)造:string();

? ? ? ? 這個構(gòu)造函數(shù)會構(gòu)造一個空字符串,長度為0個字符,但是容量不一定為零,比如在vs下空string對象的容量是15,不同環(huán)境可能有所不同,主要為了避免頻繁的擴(kuò)容操作。

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s1; //創(chuàng)建一個空字符串
	cout << s1 << endl;
	cout << s1.capacity() << endl;
}

?輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

2. C串構(gòu)造:string(const char* s);

? ? ? ? 以null結(jié)尾的字符序列(C串)構(gòu)造string對象。

int main()
{
	string s1("hello world!");
	cout << s1 << endl;

}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

3. 拷貝構(gòu)造:string(const string& str);

????????利用一個已經(jīng)存在的string對象構(gòu)造對象。

int main()
{
	string s1("hello world!");
	cout << s1 << endl;
	string s2(s1);
	cout << s2 << endl;
}

?輸出:【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

4. 字符填充構(gòu)造:string(size_t n, char c);

? ? ? ? ?利用n個字符構(gòu)造string對象。

int main()
{
	string s1(5, 'c');
	cout << s1 << endl;
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

5. 迭代器構(gòu)造:template <class InputIterator>?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??????????????????????????string(InputIterator first, InputIterator last);

? ? ? ??使用迭代器區(qū)間來構(gòu)造string對象。

int main()
{
	string s1(5, 'c');
	cout << s1 << endl;
	string s2(s1.begin(), s1.end());
	cout << s2 << endl;
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

2.2 ?string容量操作

1. size_t size(),size_t length()

? ? ? ? size()和length()都是返回字符串的有效字符長度,倆個函數(shù)的實現(xiàn)原理也完全相同,引入size()是為了和其他容器的接口保持一致。

int main()
{
	string s1(5, 'c');
	cout << s1.length() << endl;
	cout << s1.size() << endl;
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

?2. size_t capacity() const

? ? ? ? capacity()是返回空間的總大小,在vs下對象的初始容量是15,當(dāng)存儲的對象超過這個大小的時候才會去開空間,在新開的空間存儲數(shù)據(jù)。

int main()
{
	string s1(5, 'c');
	cout << s1.capacity() << endl;
	string s2(16, 'c');
	cout << s2.capacity() << endl;
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

?3. bool empty() const

? ? ? ? 檢測字符串是否是空串,是返回true,不是返回false。

int main()
{
	string s1(5, 'c');
	if (s1.empty())
	{
		cout << "true" << endl;
		cout << "空" << endl;
	}
	else
	{
		cout << "false" << endl;
		cout << "非空" << endl;
	}
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

?4. void clear()

? ? ? ? 清空對像中的有效字符。

int main()
{
	string s1("hello world!");
	cout << s1 << endl;
	cout << "--------------------------------" << endl;
	s1.clear();
	cout << s1 << endl;
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

?5. void reserve(size_t n = 0)

? ? ? ? reserve()是為了給對象預(yù)留空間,如果我們提前得知字符串需要的空間我們就可以提前開好,避免頻繁擴(kuò)容帶來的性能消耗。當(dāng)reserve的參數(shù)小于string底層空間大小的時候,reserve就不會對容量進(jìn)行處理。(一般為了保障程序的安全性,reserve()會多開出一部分空間)。

int main()
{
	string s1(10,'x');
	s1.reserve(20);
	cout << s1.capacity() << endl;
	s1.reserve(2);
	cout << s1.capacity() << endl;
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

?6. void resize(size_t n),?void resize(size_t char c)

? ? ? ? 修改字符有效個數(shù)為n,多出的空間用字符c填充。如果n小于有效字符數(shù),本質(zhì)就是刪字符操作。如果容量不夠會擴(kuò)容。

int main()
{
	string s1(10, 'x');
	cout << s1 << endl;
	s1.resize(20, 'c');
	cout << s1 << endl;
	s1.resize(2);
	cout << s1 << endl;
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

2.3 類對象的訪問

1. char& operator[](size_t pos),const char& operator[](size_t pos) const

? ? ? ? 返回pos位的字符,并且可以對非const對象進(jìn)行修改。

int main()
{
	string s1(10, '1');
	cout << s1 << endl;
	s1[4] = '0';
	cout << s1 << endl;
	for (int i = 0; i < 10; i++)
	{
		cout << s1[i] << ' ';
	}
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

?2. begin()、end()

? ? ? ? begin()返回第一個字符位置的迭代器,end()返回最后一個字符的下一個位置的迭代器。begin()和end()都返回了自己的const版本。

int main()
{
	string s1(10, '1');
	auto it = s1.begin();
	for (; it < s1.end(); it++)
	{
		cout << *it;
	}
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

?3. rbegin()、rend()

? ? ? ? rbegin()獲取一個反向迭代器,指向其反向開頭,rend()獲取一個反向迭代器,指向其反向結(jié)尾的前一個理論元素。

int main()
{
	string s1("123456789");
	cout << s1 << endl;
	auto it = s1.rbegin();
	for (; it < s1.rend(); it++)
	{
		cout << *it;
	}
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

2.4?string對象處理函數(shù)

1. push_back()

? ? ? ? 在字符串后尾插字符c。

int main()
{
	string s1;
	s1.push_back('1');
	cout << s1;
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

2. append()

? ? ? ? append()函數(shù)在在C++98有六種重載形式,用于在字符串后追加一個字符串。

  1. string(1)? ? ? ?string& append(const string& str);
  2. substring(2) string& append(const string& str, size_t subpos, size_t sublen);
  3. c - string(3)? string & append(const char* s);
  4. buffer(4)? ? ? ?string& append(const char* s, size_t n);
  5. fill(5)? ? ? ? ? ? ?string& append(size_t n, char c);
  6. range(6)? ? ? ?template <class InputIterator>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?string& append(InputIterator first, InputIterator last);
int main()
{
	string s1("hello");
	string s2(" world");
	cout << s1 << endl;
	s1.append(s2); //在s1結(jié)尾追加一個s1
	cout << s1 << endl;
	s1.append(s2, 1, 2); //在s1結(jié)尾追加s1的下標(biāo)為1往后的倆個字符
	cout << s1 << endl;
	s1.append("C串");   //在s1后追加一個C串
	cout << s1 << endl;
	s1.append("123456", 2);//在s1后追加字符串的前 n 個字符。
	cout << s1 << endl;
	s1.append(5, 'c');  //在s1后追加5個字符‘c’
	cout << s1 << endl;
	string s3("CSDN");
	s1.append(s3.begin(), s3.end());//在s1后追加一個迭代器區(qū)間
	cout << s1 << endl;
}

?輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

?3. operator+=

? ? ? ? operator+=()和append()功能類似,都是在字符串后追加內(nèi)容,但是我們在實際開發(fā)中更愿意使用operator+=。

int main()
{
	string s1("hello ");
	string s2("world!");
	s1 += s2;
	cout << s1 << endl;
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

?4. c_str()

? ? ? ? c_str()會返回string對象存儲字符串的首地址,用戶可以通過這個接口來適配c語言中的某些場景。

int main()
{
	string s1("hello world!");
	printf("%s", s1.c_str());
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

?5. insert()

? ? ? ? insert()支持在pos位對字符串進(jìn)行插入操作,但是由于pos位插入涉及到元素的挪動,而挪動元素會使性能下降,所以insert()要少用。insert()有多種重載形式,如下:

  1. string(1)? ? ? ?string& insert(size_t pos, const string& str);
  2. substring(2) string& insert(size_t pos, const string& str, size_t subpos, size_t sublen);
  3. c - string(3)? string & insert(size_t pos, const char* s);
  4. buffer(4)? ? ? ?string& insert(size_t pos, const char* s, size_t n);
  5. fill(5)? ? ? ? ? ? ?string& insert(size_t pos, size_t n, char c);? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?void insert(iterator p, size_t n, char c);
  6. single character(6) iterator insert(iterator p, char c);
  7. range(7)? ? ? ? template <class InputIterator>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? void insert(iterator p, InputIterator first, InputIterator last);
int main()
{
	string s1("string");
	cout << s1 << endl;
	s1.insert(2, "*********");
	cout << s1 << endl;
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

6. erase()

? ? ? ? erase()是刪除字符串的一部分,但是不會改變string對象的容量,如果給的刪除字符個數(shù)大于pos位后的字符個數(shù),會將后面的全部刪除。如果沒有給pos位,則默認(rèn)清空字符串。如果不給刪除個數(shù)則默認(rèn)是無符號整型npos(-1)即約等于42億,就會將pos位后面的字符序列全部刪除。

  1. sequence(1) string& erase(size_t pos = 0, size_t len = npos);
  2. character(2) iterator erase(iterator p);
  3. range(3)? ? ? ?iterator erase(iterator first, iterator last);
int main()
{
	string s1("1234567890");
	s1.erase(2, 3);//從pos位2開始依次刪除三個字符,即刪除"345"
	cout << s1 << endl;
	s1.erase(s1.begin() + 5);
	cout << s1 << endl;//刪除迭代器位置的字符
	s1.erase(s1.begin(), s1.begin() + 2);//刪除beigin()位置和后面1位字符
	cout << s1 << endl;
}

?輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

7. find()、rfind()

? ? ? ? find()函數(shù)用于查找某字符串中是否包含某個字符或者字符串,會從pos位往后查找,rfind()則是從pos位往前查找。找到后會返回字符首次出現(xiàn)的pos位或者字符串首次出現(xiàn)的pos位。如果沒有找到則會返回npos(無符號整型‘-1’)。

  1. string(1)? ? ? ?size_t find(const string& str, size_t pos = 0) const;
  2. c - string(2)? size_t find(const char* s, size_t pos = 0) const;
  3. buffer(3)? ? ? ?size_t find(const char* s, size_t pos, size_t n) const;
  4. character(4) size_t find(char c, size_t pos = 0) const;
int main()
{
	string s1("hello world");
	size_t pos = s1.find("llo", 0);
	cout << pos << endl;
}

輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

8. substr()

? ? ? ? substr()會獲取pos后包括pos位的n個字符并且返回一個string對象,如果沒有給獲取長度n,則會默認(rèn)將后面的包括pos位的所有字符全部獲取并且返回一個string對象。

  • string substr(size_t pos = 0, size_t len = npos) const;
int main()
{
	string s1("123456789");
	cout << s1 << endl;
	string s2(s1.substr(2, 5));
	cout << s2 << endl;
}

?輸出:

【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)

9. getline()

?????????從 istream 中提取字符并將其存儲到 str 中,直到找到分隔字符 delim(或 (2) 的換行符“\n”)。如果在 is 中到達(dá)文件末尾或在輸入操作期間發(fā)生其他錯誤,則提取也會停止。如果找到分隔符,則將其提取并丟棄(即不存儲它,下一個輸入操作將在它之后開始)。請注意,調(diào)用之前的任何內(nèi)容都將替換為新提取的序列。每個提取的字符都追加到字符串中,就像調(diào)用其成員push_back一樣。(不以空格作為分隔符,可以讀取空格符)

  • (1)istream& getline(istream& is, string& str, char delim);
  • (2)istream& getline(istream& is, string& str);

?【C++精華鋪】9.STL string,STL,C++,c++,stl,數(shù)據(jù)結(jié)構(gòu)文章來源地址http://www.zghlxwxcb.cn/news/detail-675549.html

到了這里,關(guān)于【C++精華鋪】9.STL string的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)與算法】C++的STL模板(迭代器iterator、容器vector、隊列queue、集合set、映射map)以及算法例題

    【數(shù)據(jù)結(jié)構(gòu)與算法】C++的STL模板(迭代器iterator、容器vector、隊列queue、集合set、映射map)以及算法例題

    更多算法例題鏈接: 【數(shù)據(jù)結(jié)構(gòu)與算法】遞推法和遞歸法解題(遞歸遞推算法典型例題) 什么是迭代器(iterator) 迭代器(iterator)的定義: 迭代器是一種檢查容器內(nèi)元素并遍歷元素的數(shù)據(jù)類型。 迭代器提供對一個容器中的對象的訪問方法,并且定義了容器中對象的范圍。 容器

    2024年04月14日
    瀏覽(31)
  • 【c++】STL--string

    【c++】STL--string

    ? ? ? ? 最開始我們學(xué)習(xí)c語言的時候,我們發(fā)現(xiàn)刷題或者寫代碼都是比較麻煩的,如果說用c語言造一輛車,那么我需要用c語言先把輪子造好--各個零件,當(dāng)我們造好之后再組裝。那么c++則是造好了輪子,只需要我們組裝就好了。這里的的STL里有各個組件,我只要熟悉的掌握

    2024年02月03日
    瀏覽(27)
  • C++ STL string類

    C++ STL string類

    目錄 一.為什么學(xué)習(xí)string類 (1) C語言中的字符串 (2)標(biāo)準(zhǔn)庫里面的string類 二. string類的常用接口說明 (1)string類對象的常見構(gòu)造 (2)string類對象的容量操作 1.size(),length(). 2. capacity() 3.empty() ?4.clear() ?5.reserve() ?6.resize() (3)string類對象的訪問及遍歷操作 ?1.operator[ pos

    2024年02月13日
    瀏覽(25)
  • 【C++】STL——string類詳解

    【C++】STL——string類詳解

    ?? 作者簡介:一名在后端領(lǐng)域?qū)W習(xí),并渴望能夠?qū)W有所成的追夢人。 ?? 個人主頁:不 良 ?? 系列專欄:??C++ ???Linux ?? 學(xué)習(xí)格言:博觀而約取,厚積而薄發(fā) ?? 歡迎進(jìn)來的小伙伴,如果小伙伴們在學(xué)習(xí)的過程中,發(fā)現(xiàn)有需要糾正的地方,煩請指正,希望能夠與諸君一同

    2024年02月11日
    瀏覽(23)
  • C++ [STL之string模擬實現(xiàn)]

    C++ [STL之string模擬實現(xiàn)]

    本文已收錄至《C++語言》專欄! 作者:ARMCSKGT 前面我們介紹了STL容器string的部分接口使用,有了string使我們對字符串的操作如魚得水,其實string不止于使用方便,其實現(xiàn)也有許多我們值得學(xué)習(xí)的地方,本節(jié)將為您介紹string常用接口的代碼實現(xiàn)! 本文接口的實現(xiàn)借助于C++官方

    2024年02月05日
    瀏覽(23)
  • C++STL詳解 string【C++】

    C++STL詳解 string【C++】

    函數(shù)模板是一個藍(lán)圖,它本身并不是函數(shù),是編譯器用使用方式產(chǎn)生特定具體類型函數(shù)的模具。所以其實模板就是將本來應(yīng)該我們做的重復(fù)的事情交給了編譯器 在編譯器編譯階段,對于模板函數(shù)的使用,編譯器需要根據(jù)傳入的實參類型來推演生成對應(yīng)類型的函數(shù)以供調(diào)用。比

    2024年02月08日
    瀏覽(22)
  • 【C++】STL之string類(2)

    【C++】STL之string類(2)

    個人主頁:平行線也會相交?? 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會相交 原創(chuàng) 收錄于專欄【C++之路】?? 本專欄旨在記錄C++的學(xué)習(xí)路線,望對大家有所幫助??? 希望我們一起努力、成長,共同進(jìn)步。?? reverse :在不改變字符串內(nèi)容的前提下,預(yù)留一定的

    2024年02月12日
    瀏覽(23)
  • C++ [STL之string的使用]

    C++ [STL之string的使用]

    本文已收錄至《C++語言》專欄! 作者:ARMCSKGT 字符串在程序中經(jīng)常出現(xiàn),C語言為此提供了很多字符串操作函數(shù),但是這些庫函數(shù)與字符串是分離開的,不太符合OOP的思想,而且底層空間需要用戶自己管理,稍不留神可能還會越界訪問,于是STL單獨(dú)為字符串實現(xiàn)了一個容器,

    2024年02月01日
    瀏覽(21)
  • 【C++】STL之string類(1)

    【C++】STL之string類(1)

    個人主頁:平行線也會相交?? 歡迎 點贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會相交 原創(chuàng) 收錄于專欄【C++之路】?? 本專欄旨在記錄C++的學(xué)習(xí)路線,望對大家有所幫助??? 希望我們一起努力、成長,共同進(jìn)步。?? 接下來就開始STL部分的學(xué)習(xí)了,本文先來學(xué)習(xí)一下

    2024年02月11日
    瀏覽(24)
  • C++ STL string類模擬實現(xiàn)

    C++ STL string類模擬實現(xiàn)

    目錄 string類成員變量 一.構(gòu)造函數(shù) 二.析構(gòu)函數(shù) 三.拷貝構(gòu)造 四.size(),capacity() 五.operator [ ] 六. operator = ?七.字符串比較 ?八.reserve() 九.push_back(),append() 十.operator+= ?十一.insert() ?十二.迭代器 ?十二.erase() 十三.swap() ?十四.find() 十五.流提取,流輸出 十六

    2024年02月14日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包