string類 迭代器 vector類

2021-10-18 15:43:40 字數 3194 閱讀 2279

string類

可變長1、用多少不夠用現增加 malloc

2、先預留再釋放不需要的部分 reverse() shrink_to_fit()

操作字串

目標:實現mystring

任務:學會使用string類成員函式(初始化、插入、比較、查詢、刪除、遍歷、替換)

標頭檔案 #include

string s = 「hello world」;

初始化string s = 「hello world」;

string si( 「hello world」);

string s1(s2);

string s1(『a』,10);十個a初始化

for(int i;i < s.size();i++)

cout << 「\n」;

迭代器迭代器就是指標,兩個指標,乙個指向字串的頭,另乙個指向其有效字元的結尾(』\0』)。

s.begin()首部指標

s.end()尾部指標

從首指標開始遍歷,只到與尾指標相同

auto it = s.begin();(指標型別實際為string::iterator)

for(auto it = s.begin(); it != s.end();it++)

cout << 「\n」;

反向迭代器

s.rbegin()/s.rend() 與上述相反的迭代器,rbegin為尾指標。string::reverse_iterator型別

仍是it++!!

for(auto it = s.rbegin(); it != s.rend();it++)

cout << 「\n」;

const迭代器

只能訪問,不能修改

s.cbegin()/s.cend string::const_iterator型別

屬性//系統預留15個位元組

s.size() s.lenth() 字元個數

s.capacity() 返回當前空間容量所能容納的字元個數(預留空間,防止單個字元插入導致的開銷問題)

s.max_size() 記憶體當前可存放的資料量

s.reserve(100) 預留空間(100個位元組)提高了效能

用之後用shrink_to_fit()釋放掉

s.shrink_to_fit() 釋放沒有用掉的記憶體空間

s.empty() 判斷字串是否為空

元素訪問

s.at()

string s = 「hello world」;

for(int i = 0;i < s.size();i++)

s.front() 第乙個字元

s.back() 最後乙個有效字元

s.c_str() 返回乙個const指標

s.data() 返回乙個非const指標

目的:實現c/c++混合程式設計(c++呼叫函式介面)

插入string s = 「hello world」;

s.insert(1,「123」);

cout << s << endl;

向第乙個字元位置後插入 h123ello world

迭代器插入

s.insert(s.begin() + 1,『1』);

只能插字元,不能插字串

刪除for(auto it = s.begin;it != s.end()?

else

}//在使用迭代器遍歷時,不要做插入刪除操作,否則會導致迭代器失效,應每次都呼叫end()更新迭代器

//返回值為當前的位置(後乙個字元向前移位)

推薦遍歷後,再迴圈體外部刪除

auto it = s.begin;

for(;it != s.end()?

}s.erase(it);

查詢string s = 「hello world hello world hh」;

string::size_type index;

index = s.find(「hello」,0); //後面數字為從第幾位置開始找,找到後返回值為下標

if(index == string::npos)

cout << index << endl;

s.rfind() //尋找字串的最後一次出現的位置

s.rfind(「world」)

s.find_first_of(「l」,0)

尋找第一次出現的位置/字串時,是尋找字串中任意乙個字元在s裡首次出現的位置

s.find_last_not_of(「h」)

find/find_first_of/find_first_not_of它們pos(第二引數)作用是從哪個位置開始找(查詢的起始位置)

rfind/find_last_of/find_last_not_of它們pos(第二引數)作用是查詢的範圍(查詢的區間)

find_first_of:形參的字串任意乙個字元在目標字串中首次出現的位置

find_last_of:形參的字串任意乙個字元在目標字串中最後出現的位置

find_first_not_of:在目標字串中第乙個不是形參字串中的任意乙個字元的位置。

find_last_not_of:在目標字串中最後乙個不是形參字串中的任意乙個字元的位置。

數值轉換(std)

stoi()

string s = 「123」;

int num = std::stoi(s);

string s1 = std::to_string(num);

cout << num << endl;

cout << s1 << endl;

vector

vector a;

vector b;

vector c;

<>裡為要指定的型別

0-9,刪除其中的奇數並遍歷輸出

#include

#include

using namespace std;

int main()

vectormark;

for(auto it = nums.begin();it != nums.end();it++)

}int size = mark.size();

for(int i = 0;i < size; ++i)

for(auto it = nums.begin();it != nums.end();it++)

return 0;

C 自己實現String類及其迭代器

注意事項 對於c語言字串char 必須在末尾置 0 對指標操作時,必須考慮指標為null的情況,對strcpy,strcat等庫函式呼叫也一樣 對指標重新賦值前必須呼叫delete,同一塊記憶體不能呼叫兩次delete 返回物件的成員函式要區分返回的是當前物件還是新物件,即函式返回型別是否要取位址 ...

過載技巧 簡單實現string和Vector

1.賦值 下標 呼叫 和成員訪問箭頭 等操作符必須定義為成員,將這些操作符定義為非成員函式將在編譯時標記為錯誤。2.像賦值一樣,復合賦值操作符通常應定義為類的成員。與賦值不同的是,不一定非得這樣做,如果定義為非成員復合賦值操作符,不會出現編譯錯誤。3.改變物件狀態或與給定型別緊密聯絡的其他一些操作符...

關於string類的倒序和反向迭代器

如何用c 來實現字串的倒序呢 我直接想到的是利用反向迭代器reverse iterator rbegin 和rend string str1 1234567890 string str2 str1.rbegin str1.rend 這是利用operator const string 別忘了還有成員函...