如果有明白的朋友麻烦告诉一下这样做的理由。



循环都没搞懂就去看服务端编程,无语。
STL标准库迭带器。。。
我知道这是个迭代器啊,我也知道list是双向链表实现的,关键把++it往前挪动一行到底有什么意义啊。
是在迭代器失效前进行++操作吗?但已经换成了list,即使++在update函数后面也应该没有影响才对啊。
//以下代码只会删除第一个2,第二个2被++it跳过删除。
std::vector<int> v{1,2,2,3,4,5,6,7,8};
auto it = v.begin();
while(it != v.end()){
if(*it == 2){
v.erase(it);
}
++ it;
}
for(auto it:v){
std::cout<<it <<" "; //结果 1 2 3 4 5 6 7 8
}
//删除8之后,it已经指向了v的end,再++it就越界了。
std::vector<int> v{1,2,2,3,4,5,6,7,8};
auto it = v.begin();
while(it != v.end()){
if(*it == 8){
v.erase(it);
}
++ it;
}
循环都没搞懂就去看服务端编程,无语。
STL标准库迭带器。。。
我知道这是个迭代器啊,我也知道list是双向链表实现的,关键把++it往前挪动一行到底有什么意义啊。
是在迭代器失效前进行++操作吗?但已经换成了list,即使++在update函数后面也应该没有影响才对啊。
这本书讲的东西也不是100%对的。
这里vector换list并没有解决本身问题,纯粹就是换了个容器,作者以为update函数里调用unregister对observers_进行了某个元素的erase或者修改会导致外部迭带器it的失效,所以在失效前赶紧先++it让它指向下一个元素,而其实现在vector的实现算法中删除和修改并不会导致已有迭带器的失效问题,因为vector内部数据是连续存储的堆内存,只有push_back增加元素时因已有堆内存不够需要重新申请才可能导致已有迭带器无效。除非update里对observers_进行了元素增加。
所以只有可能erase最后一个元素后再++it导致的越界问题,而这个问题,不是靠什么换成list以及++it提前一行所能解决的。
资源内容是Linux多线程服务端编程 - 陈硕(高清完整版),带标签
《Linux多线程服务端编程:使用muduo C++网络库》.(陈硕).[PDF]
Linux多线程服务端编程:使用muduo C++网络库 本书主要讲述采用现代 C++ 在 x86-64 Linux 上编写多线程 TCP 网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即 one loop per thread。...
《Linux多线程服务端编程:使用muduo C++网络库》pdf文档
Linux多线程服务端编程:使用muduo C++网络库(陈硕 著).pdf
从网络到操作系统到linux 包括C++ 基础, 线程,服务器架构角度来讲.真是一本不错的书籍.
知乎里很多人推荐陈硕,也就是那本《linux多线程服务端编程》的作者 https://www.zhihu.com/question/22969442/answer/917119560 https://www.zhihu.com/question/37240233
《Linux多线程服务端编程:使用muduo C++网络库》.(陈硕).[PDF]@ckook 《Linux多线程服务端编程:使用muduo C++网络库》.(陈硕).[PDF]@ckook
以处理TCP连接超时为例,比如设定8秒未接受到数据,则该连接超时。 用8个桶组成一个循环队列,第n个桶存放第n秒将要超时的连接,每个连接一收到数据就把自己放入第8个桶中,在每秒的timer中,把第一个桶的连接断开...
《Linux 多线程服务端编程:使用 muduo C++ 网络库》网上书店订购内容简介本书主要讲述采用现代 C++ 在 x86-64 Linux 上编写多线程 TCP 网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程...
首先,作者根据股票创建了一个基本的股票对象池,如果股票被用到,则共享,如果用不到则析构。 version 1 class StockFactory:boost::noncopyable{ public: shared_ptr<Stock> get(const string &...
《Linux 多线程服务端编程:使用 muduo C++ 网络库》 电子版已在京东上市销售。购买地址:http://e.jd.com/30149978.html阅读效果:PCiPad目前京东的阅读器没有切白边功能,值得改进。
4.9 多线程与fork fork()一般不能在多线程中调用,因为Linux的fork只克隆当前线程的thread of ctrl,不克隆其他线程。即,fork之后子进程只有一个线程,其他线程都消失了。 7.2文件传输 ...
这本书确实是学习多核时代采用现代C++编写多线程程序的好书,下面是学习总结: 第一章线程安全的对象生命期管理 对象的创建很简单,但是不要在构造期间泄漏this指针,比如不要在构造函数中注册任何回调函数,二...
陈硕C++网络编程实战百度云下载链接 百度云盘共享,学习使用,请勿用于商业用途
C++网络编程 卷1和卷2 以及 Linux多线程服务端编程 - 陈硕(高清完整版)
Richard Stevens 的《UNIX 网络编程(第2 版)》第27 章“Client-ServerDesign Alternatives”介绍了十来种当时(20 世纪90 年代末)流行的编写并发网络程序的方案。[UNP] 第3 版第30 章,内容未变,还是这几种。...
《Linux多线程服务端编程:使用muduo C++网络库》这本书自今年一月上市以来,半年之内已经重印两次(加上首印,一共是三次印刷),总印数达到了9000册,这在技术书里已经算是相当不错的成绩。 作者说:以下谈一谈这...
陈硕《网络编程实战》01 网络编程概要 站在巨人的肩膀之上。 按照录像整理,版权归陈硕大神。 大家好,我是陈硕,受邀讲授一门有关网络编程的在线课程,这门课程的名称是《网络编程实战》,主要通过讲解十多个...
价值400元的视频教程 网络编程实践 服务器 c++ 陈硕 boolan 视频教程
陈硕于博览网所讲授的网络编程课程 别人录屏而来的 只有某一讲他录错了 其他没有任何问题
TCP网络编程本质论思维转换:把原来“主动调用recv(2)来接收数据,主动调用accept(2)来接受新连接,主动调用send(2)来发送数据”的思路转换为“注册一个收数据的回调,网络库收到数据会调用我,直接把数据提供给我,...
把原书第8章的例子《设计Reactor——如何从头开始编写非阻塞网络库》 ... 用 c++11 搞了一遍,并且简化到全部代码放在一个文件...步骤0:什么都不做的 event loop 事件循环 EventLoop, assertInLoopThread() 这个步...
本章作者主要是总结了一两种常用的线程模型。归纳了进程通信与线程同步的最佳实践进程与线程的区别: 进程是文件系统中的最重要的两个概念之一(令一个是文件)。简单地说,一个进程是内存中正在运行的程序。...
这里先复习以下weak_ptr 主要就是weak_ptr初始化赋值,由于weak_ptr 没有shared_ptr的make_shared(new class)函数,所以定义的weak_ptr必须由另外一个weak_ptr或者shared_ptr通过wp=sp,或者wp(sp),这样给weak_ptr...