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();