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