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 別忘了還有成員函...