1.容器
#include <forward_list>//单向链表
#include <list>
//有序容器
#include <map>
#include <set>
//无序容器
#include <unordered_set>
#include <unordered_map>
auto tupleFoo(int num)
{
if(0 == num)
return std::make_tuple(13, "Jon", "js");
if(1 == num)
return std::make_tuple(14, "Wendy", "sh");
if(2 == num)
return std::make_tuple(12, "Keiven", "hongkong");
}
void container_run()
{
//线性容器
#include <array>
const int arr_len = 5;//or constexpr int arr_len = 4;
std::array<int, arr_len> arr = {11,2,23,4};
if(arr.empty())
{
}
else
{
cout<<arr.size()<<endl;
std::sort(arr.begin(), arr.end(), [](int a, int b){
return a > b;
});
for(auto i:arr)
cout<<i<<endl;
}
//unordered container
std::unordered_map<int, string> mmp = {
{1, "z"},
{6, "y"},
{3, "c"}
};
for(auto i:mmp)
cout<<i.first<<endl;
}
2.元组
#include <tuple>
/*元组
*std::make_tuple:构造元组
* std::get:获取元组某个位置的值
* std::tie:元组拆包
* std::tuple_cat:元组合并
* std::tuple_size:元组大小
*/
auto student = tupleFoo(1);
cout<<std::get<2>(student)<<endl;
cout<<std::get<int>(student)<<endl;//std::get<string>(student):编译错误(student元组中存在多个string类型)
auto new_student = std::tuple_cat(student, tupleFoo(0));
cout<<std::tuple_size<decltype(new_student)>::value<<endl;
int age;string name,hometown;
std::tie(age, name, hometown) = tupleFoo(2);
cout<<age<<" "<<name<<" "<<hometown<<endl;
}
void inteligence_ptr()
{
#include <memory>
/*std::shared_ptr强指针
* use_count:引用计数
* get:返回原始指针
* reset:清除当前指针引用(use_count=0),其他智能指针(use_count-1)
* */
auto pointer = std::make_shared<int>(10);
cout<<"pointer reference & :"<<pointer.use_count()<<endl;
auto pointer1 = pointer;
cout<<pointer1.use_count()<<endl;
auto p = pointer.get();
cout<<pointer.use_count()<<endl;
auto pp = pointer1;
cout<<pp.use_count()<<"raw pointer:"<<pointer.use_count()<<endl;
pointer.reset();//pointer.use_count()==0
cout<<pointer1.use_count()<<endl;//其他pointerX:use_count-=1;
cout<<pointer.use_count()<<endl;
/*std::unique_ptr独占指针
*独占智能指针,禁止其他智能指针共享同一个对象
*/
auto unique_ptr = std::make_unique<int>(6);
auto unique_ptr_1 = std::move(unique_ptr);//必须使用右值引用,才能转移给其他ptr;
//auto unique_ptr_2 = unique_ptr_1;禁止共享
/*std::weak_ptr弱指针
*弱引用不会引起引用计数增加
* std::weak_ptr 没有* 运算符和-> 运算符,所以不能够对资源进行操作,它的唯一作用就是用于
检查std::shared_ptr 是否存在,其expired() 方法能在资源未被释放时,会返回true,否则返回
false。
*/
std::weak_ptr<int> weakPtr = pointer1;
cout<<"weak ptr :"<<pointer1.use_count()<<endl;
}
3.正则表达式
#include <regex>
void RegEx()
{
//正则表达式-regular expression
/*std::regex:正则表达式形式
*std::regex_match(std::string, std::regex):判断是否匹配正则形式,返回true/false
*std::smatch:std::regex中的N个元素(std::regex_match(std::string, std::smatch, std::regex))
*/
std::string str[] = {"abc.txt", "123.txt", "q-a.txt"};
std::regex txt_regex("[a-z]+\.txt");
for(const auto &i:str)
cout<<i<<" is match :"<<(std::regex_match(i, txt_regex)?"true":"false")<<endl;
}