c / c++ 筆記

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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章