C++相关闲碎记录(6)

1、使用shared_ptr

#include <iostream>
#include <memory>
#include <set>
#include <deque>
#include <algorithm>
#include <string>class Item {
private:std::string name;float price;
public:Item(const std::string& n, float p = 0) :name(n), price(p) {}std::string getName() const {return name;}void setName(const std::string& n) {name = n;}float getPrice() const {return price;}float setPrice(float p) {price = p;return p;}
};template <typename Coll>
void printItems(const std::string& msg, const Coll& coll) {std::cout << msg << std::endl;for (const auto& elem: coll) {std::cout << " " << elem->getName() << ": " << elem->getPrice() << std::endl;}
}int main() {using namespace std;typedef shared_ptr<Item> ItemPtr;set<ItemPtr> allItems;deque<ItemPtr> bestsellers;bestsellers = {ItemPtr(new Item("Kong Yize", 20.10)),ItemPtr(new Item("A Midsummer Night's Dream", 14.99)),ItemPtr(new Item("The Maltese Falcon", 9.88))};allItems = {ItemPtr(new Item("Water", 0.44)),ItemPtr(new Item("Pizza", 2.22))};allItems.insert(bestsellers.begin(), bestsellers.end());printItems("bestsellers: ", bestsellers);printItems("all: ", allItems);cout << endl;for_each(bestsellers.begin(), bestsellers.end(),[](shared_ptr<Item>& elem) {elem->setPrice(elem->getPrice() * 2);});bestsellers[1] = *(find_if(allItems.begin(), allItems.end(),[](shared_ptr<Item> elem) {return elem->getName() == "Pizza";}));bestsellers[0]->setPrice(44.88);printItems("bestsellers: ", bestsellers);printItems("all: ", allItems);return 0;
}

面的set使用find的时候,会找出拥有相等value的元素,现在却比较的是内部的指针,

allItems.find(ItemPtr(new Item("Pizza", 2.22)))     //can't be successful,所以这里必须使用find_if算法。

2、advance

#include <iterator>
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;int main()
{list<int> coll;// insert elements from 1 to 9for (int i=1; i<=9; ++i) {coll.push_back(i);}list<int>::iterator pos = coll.begin();// print actual elementcout << *pos << endl;// step three elements forwardadvance (pos, 3);// print actual elementcout << *pos << endl;// step one element backwardadvance (pos, -1);// print actual elementcout << *pos << endl;
}
输出:
1
4
3

3、iter_swap()

 交换迭代器的值,迭代器类型不必相同,所指的两个值必须可以相互赋值。

#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
#include "print.hpp"
using namespace std;int main()
{list<int> coll;// insert elements from 1 to 9for (int i=1; i<=9; ++i) {coll.push_back(i);}PRINT_ELEMENTS(coll);// swap first and second valueiter_swap (coll.begin(), next(coll.begin()));PRINT_ELEMENTS(coll);// swap first and last valueiter_swap (coll.begin(), prev(coll.end()));PRINT_ELEMENTS(coll);
}
输出:
1 2 3 4 5 6 7 8 9 
2 1 3 4 5 6 7 8 9
9 1 3 4 5 6 7 8 2
#include <iterator>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main()
{// create list with elements from 1 to 9vector<int> coll = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };// find position of element with value 5vector<int>::const_iterator pos;pos = find (coll.cbegin(), coll.cend(),5);// print value to which iterator pos referscout << "pos:  " << *pos << endl;// convert iterator to reverse iterator rposvector<int>::const_reverse_iterator rpos(pos);// print value to which reverse iterator rpos referscout << "rpos: " << *rpos << endl;
}
输出:
pos:  5
rpos: 4

 

#include <iterator>
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;void print (int elem)
{cout << elem << ' ';
}int main()
{// create deque with elements from 1 to 9deque<int> coll = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };// find position of element with value 2deque<int>::const_iterator pos1;pos1 = find (coll.cbegin(), coll.cend(),  // range2);                          // value// find position of element with value 7deque<int>::const_iterator pos2;pos2 = find (coll.cbegin(), coll.cend(),  // range7);                          // value// print all elements in range [pos1,pos2)for_each (pos1, pos2,     // rangeprint);         // operationcout << endl;// convert iterators to reverse iteratorsdeque<int>::const_reverse_iterator rpos1(pos1);deque<int>::const_reverse_iterator rpos2(pos2);// print all elements in range [pos1,pos2) in reverse orderfor_each (rpos2, rpos1,   // rangeprint);         // operationcout << endl;
}
输出:
2 3 4 5 6 
6 5 4 3 2

4、使用base()将reverse迭代器转回正常

#include <iterator>
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;int main()
{// create list with elements from 1 to 9list<int> coll = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };// find position of element with value 5list<int>::const_iterator pos;pos = find (coll.cbegin(), coll.cend(),  // range5);                          // value// print value of the elementcout << "pos:   " << *pos << endl;// convert iterator to reverse iteratorlist<int>::const_reverse_iterator rpos(pos);// print value of the element to which the reverse iterator referscout << "rpos:  " << *rpos << endl;// convert reverse iterator back to normal iteratorlist<int>::const_iterator rrpos;rrpos = rpos.base();// print value of the element to which the normal iterator referscout << "rrpos: " << *rrpos << endl;
}
输出:
pos:   5
rpos:  4
rrpos: 5

5、back_inserter

#include <vector>
#include <algorithm>
#include <iterator>
#include "print.hpp"using namespace std;int main() {vector<int> coll;back_insert_iterator<vector<int>> iter(coll);*iter = 1;*iter++;*iter = 2;iter++;*iter = 3;PRINT_ELEMENTS(coll);// convenient wayback_inserter(coll) = 44;back_inserter(coll) = 55;PRINT_ELEMENTS(coll);// use back inserter to append all elements again// - reserve enough memory to avoid reallocationcoll.reserve(2*coll.size());copy(coll.begin(), coll.end(), back_inserter(coll));PRINT_ELEMENTS(coll);return 0;
}
输出:
1 2 3 
1 2 3 44 55
1 2 3 44 55 1 2 3 44 55

6、front_inserter

#include <list>
#include <algorithm>
#include <iterator>
#include "print.hpp"using namespace std;int main() {list<int> coll;front_insert_iterator<list<int>> iter(coll);*iter = 1;iter++;*iter = 2;iter++;*iter = 3;PRINT_ELEMENTS(coll);front_inserter(coll) = 44;front_inserter(coll) = 55;PRINT_ELEMENTS(coll);copy(coll.begin(), coll.end(), front_inserter(coll));PRINT_ELEMENTS(coll);return 0;
}
输出:
3 2 1 
55 44 3 2 1
1 2 3 44 55 55 44 3 2 1

7、inserter

#include <set>
#include <list>
#include <algorithm>
#include <iterator>
#include "print.hpp"using namespace std;int main() {set<int> coll;insert_iterator<set<int>> iter(coll, coll.begin());*iter = 1;iter++;*iter = 2;iter++;*iter = 3;PRINT_ELEMENTS(coll,"set: ");inserter(coll, coll.end()) = 44;inserter(coll, coll.end()) = 55;PRINT_ELEMENTS(coll, "set: ");list<int> coll2;copy(coll.begin(), coll.end(), inserter(coll2, coll2.begin()));PRINT_ELEMENTS(coll2, "list: ");copy(coll.begin(), coll.end(), inserter(coll2, ++coll2.begin()));PRINT_ELEMENTS(coll2, "list: ");return 0;
}
输出:
set: 1 2 3 
set: 1 2 3 44 55
list: 1 2 3 44 55
list: 1 1 2 3 44 55 2 3 44 55

 8、ostream迭代器

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>using namespace std;int main() {ostream_iterator<int> intWriter(cout, "\n");*intWriter = 43;intWriter++;*intWriter = 77;intWriter++;*intWriter = -5;vector<int> coll = {1, 2, 3, 4, 5, 6, 7, 8, 9};copy(coll.begin(), coll.end(), ostream_iterator<int>(cout));cout << endl;copy(coll.begin(), coll.end(), ostream_iterator<int>(cout, " < "));cout << endl;return 0;
}
输出:
43
77
-5
123456789
1 < 2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 <

 9、istream迭代器

#include <iterator>
#include <iostream>
#include <string>
#include <algorithm>using namespace std;int main() {istream_iterator<string> cinPos(cin);ostream_iterator<string> coutPos(cout, " ");while (cinPos != istream_iterator<string>()) {advance(cinPos, 2);if (cinPos != istream_iterator<string>()) {*coutPos++ = *cinPos++;}}cout << endl;return 0;
}
输入:
No one objects if you are doing
a good programming job for 
someone whom you respect
输出:
objects are good for you

10、move迭代器

std::vector<string> v2(make_move_iterator(s.begin()),make_move_iterator(s.end()));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/210720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光学遥感显著目标检测初探笔记总结

目录 观看地址介绍什么是显著性目标检测根据不同的输入会有不同的变体(显著性目标检测家族)目前这个领域的挑战 技术方案论文1(2019)论文2(2021)论文3(2022) 未来展望 观看地址 b站链接 介绍 什么是显著性目标检测 一张图片里最吸引注意力的部分就是显著性物体&#xff0c;…

C++STL详解+代码分析+典例讲解

vector 的介绍&#xff1a; 1、vector是表示可变大小数组的序列容器。 2、vector就像数组一样&#xff0c;也采用的连续空间来存储元素&#xff0c;这也意味着可以采用下标对vector的元素进行访问。 3、vector与普通数组不同的是&#xff0c;vector的大小是可以动态改变的。 4、…

基于物联网的智能仓管理系统方案

基于物联网的智能仓管理系统方案 一、项目背景 随着企业业务的快速发展&#xff0c;传统的人工仓库管理方式已经无法满足现代企业的需求。仓库运营效率低下、货物出入库错误、库存不准确等问题不断涌现。因此&#xff0c;我们提出一个基于物联网技术的智能仓管理系统方案&…

Redis 五大经典业务问题

一 缓存穿透 缓存穿透是指当请求的数据既不在缓存中也不存在于数据库中时&#xff0c;请求会直接穿透缓存层&#xff0c;到达数据库层。这通常是由于恶意攻击或者程序错误造成的&#xff0c;比如攻击者故意请求不存在的大量数据&#xff0c;导致缓存不命中&#xff0c;所有的请…

智能优化算法应用:基于被囊群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于被囊群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于被囊群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.被囊群算法4.实验参数设定5.算法结果6.参考文…

Moco框架的搭建使用

一、前言   之前一直听mock&#xff0c;也大致了解mock的作用&#xff0c;但没有具体去了解过如何用工具或框架实现mock&#xff0c;以及也没有考虑过落实mock&#xff0c;因为在实际的工作中&#xff0c;很少会考虑用mock。最近在学java&#xff0c;刚好了解到moco框架是用于…

城市基础设施智慧路灯改造的特点

智慧城市建设稳步有序推进。作为智慧城市的基础设施&#xff0c;智能照明是智慧城市的重要组成部分&#xff0c;而叁仟智慧路灯是智慧城市理念下的新产品。随着物联网和智能控制技术的飞速发展&#xff0c;路灯被赋予了新的任务和角色。除了使道路照明智能化和节能化外&#xf…

用电商API接口获取拼多多的商品详情数据

pinduoduo.item_get_app_pro-根据ID取商品详情原数据 公共参数 API请求地址 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_searc…

VBA_MF系列技术资料1-237

MF系列VBA技术资料 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧&#xff0c;我参考大量的资料&#xff0c;并结合自己的经验总结了这份MF系列VBA技术综合资料&#xff0c;而且开放源码&#xff08;MF04除外&#xff09;&#xff0c;其中MF01-04属于定…

[Linux] 用LNMP网站框架搭建论坛

一、nginx在其中工作原理 原理&#xff1a; php-fpm.conf是控制php-fpm守护进程 它是php.ini是一个php解析器 工作过程&#xff1a; 1.当客户端通过域名请求访问时&#xff0c;Nginx会找到对应的虚拟主机 2. Nginx将确定请求。 对于静态请求&#xff0c;Nginx会自行处理…

结构体和位段

结构体&#xff1a; C语言中&#xff0c;我们之前使用的都是C语言中内置的类型&#xff0c;比如整形&#xff08;int&#xff09;、字符型&#xff08;char&#xff09;、单精度浮点型&#xff08;float&#xff09;等。但是我们知道&#xff0c;我们现实世界中&#xff0c;还…

json精讲

本文介绍json的规范及javascript和java对数据的交换读取 1. json介绍1.1 json简介1.2为什么使用 JSON&#xff1f; 2. json规范2.1基础规范2.2 key值为-字符串、数字、布尔值2.3 key值为对象Object2.4 key值为数组2.5 json本身就是一个数组 3.javascript操作json3.1 javascript…

2、关于使用ajax验证绕过(实例2)

ajax原理我上一篇有写过&#xff0c;参考&#xff1a;1、关于前端js-ajax绕过-CSDN博客 一、实例环境&#xff1a; 为手机上的某一割韭菜app 二、目的&#xff1a; 实现绕过手机验证码&#xff0c;找回密码 三、工具&#xff1a; bp代理 四、验证步骤如下&#xff1a; …

hive自定义函数及案例

一.自定义函数 1.Hive自带了一些函数&#xff0c;比如&#xff1a;max/min等&#xff0c;但是数量有限&#xff0c;自己可以通过自定义UDF来方便的扩展。 2.当Hive提供的内置函数无法满足你的业务处理需要时&#xff0c;此时就可以考虑使用用户自定义函数。 3.根据用户自定义…

构建外卖系统:使用Django框架

在当今数字化的时代&#xff0c;外卖系统的搭建不再是什么复杂的任务。通过使用Django框架&#xff0c;我们可以迅速建立一个强大、灵活且易于扩展的外卖系统。本文将演示如何使用Django构建一个简单的外卖系统&#xff0c;并包含一些基本的技术代码。 步骤一&#xff1a;安装…

波奇学Linux:父子进程和进程状态

vim编辑器&#xff0c;编写一个程序模拟进程 在vim中查看sleep函数 底行模式输入 写个Makefile自动运行波奇学Linux:yum和vim-CSDN博客 运行程序 PID和PPID 查看进程目录信息 实际有过滤出来有两个&#xff0c;一个进程本身一个是grep程序&#xff0c;通过 -v grep过滤走含gre…

新版Android Studio 正则表达式匹配代码注释,删除注释,删除全部注释,IntelliJ IDEA 正则表达式匹配代码注释

正则表达式匹配代码注释 完整表达式拼接Android Studio 搜索匹配【IntelliJ IDEA 也是一样的】 完整表达式拼接 (/*{1,2}[\s\S]?*/)|(//[\x{4e00}-\x{9fa5}].)|(<!-[\s\S]?–>)|(^\s\n)|(System.out.println.*) 表达式拆解&#xff0c;可以根据自己需求自由组合&#x…

Mybatis、Mybatis整合Spring的流程图

Mybatis 注意MapperProxy里面有invoke方法&#xff0c;当进到invoker方法会拿到 二、mybatis整合Spring 1、当我们的拿到的【Dao】其实就是【MapperProxy】&#xff0c;执行Dao的方法时&#xff0c;会被MapperProxy的【Invoke方法拦截】 2、图上已经标注了MapperProxy包含哪些…

STM32-TIM定时器中断

目录 一、TIM&#xff08;Timer&#xff09;定时器简介 二、定时器类型 2.1基本定时器结构 2.2通用定时器结构 2.3高级定时器结构 三、定时中断基本结构 四、时序图分析 4.1 预分频器时序 4.2 计数器时序 4.3 计数器无预装时序&#xff08;无影子寄存器&#xff09; …

PyQt6 水平布局Horizontal Layout (QHBoxLayout)

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计41条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…