auto
自动类型推导
#include"stdafx.h"
#include<map>
#include<iostream>
using namespace std;
int main(int argc, char* argv[])
{
//STL中的map是采用二叉树实现的
map<char, string>mymap;
//添加元素
mymap['a'] = "linying";
mymap['b'] = "linyu";
mymap['c'] = "dale";
//遍历元素
//map<char, string>::iterator it = mymap.begin(); 可见使用自动类型推导写代码更加容易
auto it = mymap.begin();
while (it != mymap.end())
{
//string 要转换成char*
//first代表key second代表value
cout << it->first << "=>" << it->second.c_str() << endl;
it++;
}
//查找某个key是否存在
if (mymap.find('d') == mymap.end())
{
cout << "没有找到该key" << endl;
}
getchar();
return 0;
}
区间迭代
std::vector<int> arr(5, 100);
for(std::vector<int>::iterator i = arr.begin(); i != arr.end(); ++i) {
std::cout << *i << std::endl;
}
// & 启用了引用 遍历容器的新方式
for(auto &i : arr) {
std::cout << i << std::endl;
}
正则表达式
#include <iostream>
#include <string>
#include <regex>
int main() {
std::string fnames[] = {"foo.txt", "bar.txt", "test", "a0.txt", "AAA.txt"};
// 在 C++ 中 `\` 会被作为字符串内的转义符,为使 `\.` 作为正则表达式传递进去生效,需要对 `\` 进行二次转义,从而有 `\\.`
std::regex txt_regex("[a-z]+\\.txt");
for (const auto &fname: fnames)
std::cout << fname << ": " << std::regex_match(fname, txt_regex) << std::endl;
}
判断文件结尾
#include"stdafx.h"
#include<regex>
#include<iostream>
using namespace std;
int main(int argc, char* argv[])
{
string s= "proc.dlldll";
// 规则说明 .*说明前面可以是任意字符, $是匹配结尾 \\.dll说明匹配 .dll 组合起来就是判断文件是否以.dll结束
regex txt_regex(".*(\\.dll$)");
if (regex_match(s, txt_regex))
{
printf("匹配到对应的规则");
}
else
{
printf("没有匹配到对应的规则");
}
getchar();
return 0;
}