1.char*指針訪問元素的問題
對於char *型變量,遍歷訪問該變量的每一個元素時,會發生錯誤。
例如:
char * str="01010101";
for(int i=0;i<strlen(str);i++)
cout<<str[i]<<endl;
//以上代碼編譯通過,但輸出結果與實際不符
解決方法如下:
string str2=str;//將char *類型轉化爲string類型
for(int i=0;i<strlen(str);i++)
cout<<str2[i]<<endl;
//輸出結果相同
2.子串截取函數
string str = "abcde";
cout << str.substr(1,3); // 1代表起始下標,3代表子串長度
//輸出結果爲 "bcd"
3.string::npos
可以用作判斷字符串是否存在某個子串
string str = "abcabc";
if (str.substr("def") == string::npos)
cout << "no" << endl;
else
cout << "yes" << endl;
//輸出結果爲 "no"
4.for (auto& a : b)
a作爲b的元素,遍歷b
// s1, s2 都是unordered_map<int>類型的
// ret 記錄了s1, s2的公共子集
vector<int> ret;
for (auto& e : s1)
{
if (s2.find(e) != s2.end())
ret.push_back(e);
}
5.map
// map的聲明,左邊的是key,右邊的是value
map<char, int> roman;
// map的插入鍵值對
roman.insert(map<char, int>::value_type('I', 1);
// map的使用,直接用中括號
cout << roman['I']; // 輸出爲1
// 判斷map中是否包含某key
map<char, int>::iterator iter = map_name.find("key");
if(iter != str_num.end())
cout<<"Find, the value is"<<iter->second<<endl;
else
cout<<"Do not Find"<<endl;
6.vector排序
//升序,從小到大排序(將數據從頭到第i個進行排序)
sort(numbers.begin(), numbers.begin() +i);
//降序,從大到小排序(將數據從頭到第i個進行排序)
sort(numbers.begin(), numbers.begin() +i, greater<int>());
7.priority_queue
// 任何數據對象都可以作爲優先隊列的元素,前提是要重構比較函數。
// 這裏用pair類型作爲優先隊列中的元素對象
typedef pair<int, int> IIPair;
// 再定義cmp函數,實現這個類型數據的比較規則
struct cmp
{
bool operator()(const IIPair &left, const IIPair &right)const
{
return left.second > right.second;
}
};
// 聲明優先隊列
priority_queue<IIPair, vector<IIPair>, cmp> q;
// 獲取優先隊列中的頭節點
q.top();
// 將新元素插入優先隊列
IIPair item = make_pair(3, 1);
q.push(item);
// 刪除優先隊列中頭節點
q.pop();