当前位置: 首页 > news >正文

2.4学习

1、原子操作:在线程中保护某个数据不被多个线程共享修改,保证在一个线程结束后才能被另一个线程使用
比如count++会先读取,后进行++,最后再放回寄存器,在这个过程如果有其他线程参与就会混乱
atomic count_atomic(0); 定义count_atomic变量为原子变量不被多线程影响,而原子操作是维护一个变量,而互斥锁是维护一段代码
2、可变参数模板

点击查看代码
template<typename T>
void fun1(T t)
{cout << t << " ";
}
template<typename T,typename...Args>
void fun1(T t,Args...args)
{cout << t << " ";fun1(args...);
}
调用fun1(1, 1.2, "abcd");时先推导出第一个T为int之后的Args是double和const char*,之后再递归,推导出T为double,Args是const char* 再递归,这时只有一个参数了,只调用含有一个参数T的模板

3、在algorithm中的的sort和stable_sort,它们都可以传入一个谓词来改变排序,但是sort在排列过程中对于符合条件的部分可能会颠倒原排列的位置,而stable_sort不会改变,但是平时还是用sort,它效率更高
4、for_each,用于遍历,前两个参数是迭代器,最后一个参数是谓词,用于修改输出的格式
5、find_if和partition,这两个都是根据传入的谓词来筛选,区别是find_if在查找到第一个符合条件的就返回迭代器,而partition是按照谓词将数据分割成两部分,前部分是符合标准的,后一部分不符合标准,然后返回符合标准的最后一个迭代器的位置,如果要筛选所有vector中符合长度的字符串,用find_if就需要先用sort对其按照长度排好序,而partition就不需要

点击查看代码
template<class T>
inline void out_put(vector<T>&vv)
{for (auto i : vv){cout << i << " ";}cout << endl;
}
//排列并删去重复的数据
void elimDpus(vector<string>&ss)
{sort(ss.begin(), ss.end());//按字典顺序排列out_put(ss);auto temp = unique(ss.begin(), ss.end());ss.erase(temp, ss.end());out_put(ss);
}
void biggest(vector<string>&&ss,vector<int>::size_type sz)
{elimDpus(ss);//按长度排序stable_sort(ss.begin(), ss.end(), [=](const string&a, const string&b) {return a.size() < b.size(); });out_put(ss);auto position = find_if(ss.begin(), ss.end(), [sz](const string&temp) {return temp.size() >= sz; });cout << "符合要求的数量:" << ss.end() - position << endl;for_each(ss.begin(), position, [](const string&temp) {cout << temp<<" "; });
}int main()
{fstream ff("stringTest.txt");if (!ff.is_open()){cout << "fail" << endl;return 1;}string val;vector<string>vv;while (ff >> val){vv.push_back(val);}out_put(vv);biggest(move(vv), 5);return 0;
}
结果是

image
如果用partition

点击查看代码
void biggest(vector<string>&&ss,vector<int>::size_type sz)
{elimDpus(ss);//按长度排序//stable_sort(ss.begin(), ss.end(), [=](const string&a, const string&b) {return a.size() < b.size(); });//out_put(ss);auto position = partition(ss.begin(), ss.end(), [sz](const string&temp) {return temp.size() >= sz; });out_put(ss);cout << "符合要求的数量:" << ss.end() - position << endl;for_each(ss.begin(), position, [](const string&temp) {cout << temp<<" "; });
}
结果是

image

6、lambda表达式,本质是一个匿名的函数对象,它通过[]捕获的变量会类似于类中的成员变量,只有当离开作用域才会消失
mutable表示lambda捕获的拷贝变量可以被修改
这段代码中就和上面说的被拷贝捕获的i不会因为一次一次的调用lambda而重置为5,它是一个类成员变量,每次都会按条件--,因为是拷贝的i,所以外部i值不会变

点击查看代码
void fun()
{int i = 5;//mutable->bool表示捕获的i可以被修改,且返回值为boolauto judgement=[i]()mutable->bool {if (i > 0){i--;return false;}elsereturn true;};for (int j = 5; j > 0; j--){judgement();}
}
http://www.jsqmd.com/news/341247/

相关文章:

  • nodejs穴位按摩小儿保健推拿培训系统的设计与实现-vue
  • ComponentOne WinForms FlexGrid将网格数据转换为可点击链接
  • 2026年靠谱的洁净板喷漆修复专业公司排名揭晓 - 工业品牌热点
  • 2026年【抛丸机厂家】联系电话推荐:精选厂家与联系指南 - 品牌推荐
  • TX Text Control .NET for WPF Enterprise
  • 教育站群系统怎样在FCKEditor中实现Word截图自动上传?
  • Factory.IO与西门子博途V16:打造仿真控制的奇妙之旅
  • 医院HIS系统富文本编辑器是否兼容WPS文档的图文转存?
  • 说说苏州及周边好用的净化板漆面修复品牌,哪家性价比高 - 工业品网
  • 百泰派克生物科技:蛋白质谱测序客户案例
  • 自适应夹爪未来发展趋势是什么?2026年自适应夹爪厂商推荐 - 品牌2025
  • 众信旅游联系方式:如何有效联系与注意事项 - 品牌推荐
  • 电动夹爪有哪些常见类型?2026年电动夹爪品牌推荐 - 品牌2025
  • 离心机费用多少,南京莫尼亚价格合理服务优 - myqiye
  • 深度测评 8个AI论文工具:本科生毕业论文写作全攻略
  • 春节假期淘宝资料发货安排通知
  • 2026年 安保服务公司推荐排行榜:专业执勤、智能巡逻与高效门卫管理,全方位安保解决方案精选 - 品牌企业推荐师(官方)
  • 众信旅游联系方式:联系官方服务渠道的指引 - 品牌推荐
  • vSphere 4.1 三大实用实战:vCenter 告警自动化、SIOC 无 License 启用及 Dropbox 存储运行 VM
  • 如何选择靠谱的成都找人公司?2026年成都找人公司评测与推荐,直击信息模糊痛点 - 品牌推荐
  • 救命神器9个降AI率工具,千笔AI帮你彻底降AIGC
  • 众信旅游联系方式:获取官方联系渠道的实用指南 - 品牌推荐
  • 你的MySQL服务为什么总启动失败?很可能是这个配置项在“捣乱“
  • 2026年长治系统门窗定制品牌推荐,双慧听岚门窗 - myqiye
  • 2026年施工升降机租赁厂家实力推荐榜:塔吊升降机/物料升降机/二手施工升降机,专业工地施工设备精选与选购指南 - 品牌企业推荐师(官方)
  • 安装软件
  • 导师推荐10个降AI率网站 千笔·专业降AI率智能体高效解决AIGC检测难题
  • 2026年机器人研学公司推荐:K12全学段适配评测,针对实践能力与升学出口痛点指南 - 品牌推荐
  • vue-office:5.4k 预览组件库,支持 docx/xlsx/pdf/pptx
  • 如何为孩子选择机器人研学?2026年机器人研学公司全面评测与推荐 - 品牌推荐