<< "str1:" << str1 << std::endl;std::string str2(std::move(str1));std::cout << "str2:" << str2 << std::endl;std::cout << "str1:" << str1 << std::endl;std::vector vec1{ 1, 2, 3, 4, 5 };std::vector vec2(std::move(vec1));std::cout << "vec1:" << vec1.size() << std::endl;std::cout << "vec2:" << vec2.size() << std::endl;std::cout << "vec1:" << vec1.size() << std::endl;// 减少内存拷贝和移动, 向容器中中加入临时对象,临时对象原地构造,没有赋值或移动的操作 。std::vector vec;vec.push_back("this is a text.");vec.emplace_back("this is a text.");}void cpp11_shared_ptr(){// C++11: 智能指针, 允许多个指针指向同一个对象std::shared_ptr s1(new int(100));std::shared_ptr s2(s1);//s1.reset();//s1 = nullptr;auto s3 = std::make_shared(200);bool isEqual = (s1 == s2);printf("s1:%d, s2:%d, s3:%d, s1 == s2:%sn", *s1, *s2, *s3, isEqual ? "y" : "n");class MySharedClass : public std::enable_shared_from_this{public:MySharedClass() { }virtual ~MySharedClass() { }public:void p(){printf("%pn", this);}std::shared_ptr getSharedPtr(){return shared_from_this();}};std::shared_ptr p1(new MySharedClass());std::shared_ptr p2 = p1;printf("use count:%dn", p2.use_count());// 使用std::make_shared可以消除显式的使用 newauto p3 = std::make_shared();p1->p();p2->p();p3->p();p3.reset(); // 计数器减1auto deleteMySharedClass = [](MySharedClass *p){delete p;};// 自定义内存释放函数std::shared_ptr p4(new MySharedClass(), deleteMySharedClass);p4->p();auto p5(std::move(p4));p4->p();p4 = nullptr; // 计数器减1// 独占的智能指针, 引用计数为0或1,不能共享std::unique_ptr up1(new int(500));// std::unique_ptr up2(up1); // errorprintf("up1:%dn", *up1);std::unique_ptr up2(std::move(up1));int* upv = up2.release();delete upv;}void cpp17_string_view(){#if _HAS_CXX17// string_view是C++17引用的类库,避免内存复制std::string_view sv("cpp17 string view");auto s1 = sv.substr(0, 10);const char *str = sv.data();auto str2 = std::string(str, sv.length());for(auto c : s1){}// 调用substr并不会分配新的内存,只是引用原内存地址std::cout << s1 << std::endl;#endif // _HAS_CXX17}void cpp11_others(){{// 参数初始化std::map m{ {"a", 1}, {"b", 2}, {"c", 3} };for(const auto &kv : m){std::cout << kv.first << " : " << kv.second << std::endl;}std::vector iv{5, 4, 3, 2, 1};iv.push_back(6);// array 常量数组std::array ary = { 1, 2, 3, 4 };ary.empty(); // 检查容器是否为空ary.size();// 返回容纳的元素数std::sort(ary.begin(), ary.end(), [](int a, int b){return b < a;});}{// std::this_thread::yield() 当前线程让出自己的CPU时间片(给其他线程使用)// std::this_thread::sleep_for() 休眠一段时间.std::atomic ready(false);while(!ready){// std::this_thread::yield();for(int i = 0; i < 5; i ++){std::this_thread::sleep_for(std::chrono::milliseconds(100));}ready = true;}}{// high resolution clockstd::chrono::time_point ct1 = std::chrono::high_resolution_clock::now();std::this_thread::sleep_for(std::chrono::milliseconds(100));std::chrono::time_point ct2 = std::chrono::high_resolution_clock::now();int64_t systemClock1 = std::chrono::duration_cast(ct1 - std::chrono::time_point()).count();int64_t systemClock2 = std::chrono::duration_cast(ct2 - std::chrono::time_point()).count();int64_t sleepMS = std::chrono::duration_cast(ct2 - ct1).count();int64_t sleepUS = std::chrono::duration_cast(ct2 - ct1).count();std::cout << "sleep milliseconds : " << sleepMS << ", sleep microseconds : " << sleepUS << std::endl;using hrc = std::chrono::high_resolution_clock;std::chrono::time_point ct3 = hrc::now();}{// 元组auto t1 = std::make_tuple(10, "string", 3.14);//std::type_info ti = (int);std::vector veco1;printf("tuple : %d, %s, %.3fn", std::get<0>(t1), std::get<1>(t1), std::get<2>(t1));std::get<1>(t1) = "text";// 对tuple解包int v1 = std::get<0>(t1);std::string v2;double v3;std::tie(v1, v2, v3) = t1;printf("tie(%d, %s, %.3f)n", v1, v2.c_str(), v3);std::tuple t2(3.1415926, "pi");}{// std::unordered_map, std::unordered_setstd::map m1;m1["b"] = 2;m1["c"] = 3;m1["a"] = 1;for(const auto &v : m1){std::cout << v.first << ":" << v.second << std::endl;}std::unordered_map m2;m2["b"] = 2;m2["c"] = 3;m2["a"] = 1;for(const auto &v : m2){std::cout << v.first << ":" << v.second << std::endl;}}{auto x = 1;auto y = 2;// 推导返回类型using type = decltype(x+y);type z; // intz = 100;std::cout << z << std::endl;}{// 原始字符串字面量std::string str = R"(C:\What\The\Fxxksdfsadf345'''23'47523*"(""/'\""")";std::cout << str << std::endl; // C:\What\The\Fxxksdfsadf345'''23'47523*"/'\"""// 支持3种UNICODE编码: UTF-8, UTF-16, 和 UTF-32const charu1[] = u8"I'm a UTF-8 string.u2018";const char16_t u2[] = u"This is a UTF-16 string.u2018";const char32_t u3[] = U"This is a UTF-32 string.U00002018";}{// to string or wstringauto v = std::to_wstring(1000);std::cout
推荐阅读
-
『印度』新官上任三把火,印上将抛出:百万大军调转枪口,专家:62年悲剧或重演
-
微博网友|?快看!国家制止餐饮浪费将立法 你的消费习惯要改了
-
中商情报网|2020年全球医疗器械市场现状分析及市场规模预测
-
-
美国修改留学生签证新规,体现了特朗普政府的短视与算计
-
抖音|今年上半年全球最赚钱、下载量最大App出炉:都来自中国
-
央视新闻|北京新发地批发市场终末消杀工作已完成 结果合格
-
湘江北去|中共湖南群林科技有限公司支部委员会党员大会隆重举行
-
如何取消优酷会员自动续费服务,怎么取消优酷会员的自动续费功能
-
环球网|韩国赴华乘客登机核酸检测证明时限调整 中使馆提醒
-
快科技:SE比最快的Android手机都要快,库克:iPhone
-
-
数据|万国数据赴港二次上市首日涨3% 收入高增长4年连亏
-
-
-
无人机网慧明捷参与四川省“全省人防指挥通信比武竞赛”活动保障
-
孕妇|明明有风险成分,还鼓吹着“孕妇专用”?有些洗面奶就该丢垃圾桶
-
-
成龙|直到去世时,李连杰成龙还没原谅他,网友∶这是有多大的仇怨!
-
詹姆斯|复制詹皇之路?字母哥社媒取关雄鹿队友,轰动NBA交易要出现了