【深入学习c++--智能指针(二) weak_ptr(打破shared_ptr循环引用)】教程文章相关的互联网学习教程文章

C++ for 循环【代码】

C++的另一种for循环写法,和C#的foreach语法很类似,不需要知道数组的类型;C++:for(auto& item:items)C#:foreach(var item in items) 1int ages [10] = {0};2//常规for循环 3for(int i=0;i<(sizeof(ages)/sizeof(ages[0]));i++)4 { 5 ages[i]=i;6 cout<<ages[i]<<endl;7 }8//for(auto 赋值操作 9for(auto& age :ages) 10 { 11 age+=10; 12 } 13 cout<<"----------"<<endl; ...

c++ 智能指针及 循环引用问题

c++智能指针介绍由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete,比如流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见,并造成内存泄露。如此c++引入智能指针 ,智能指针即是C++ RAII的一种应用,可用于动态资源管理,资源即对象的管理策略。智能指针在 <memory> 标头文件的 std 命名空间中定义。 它们对 RAII 或获取资源即初始化编程惯用法至关重要。RAI...

C++ 循环缓冲类【代码】【图】

昨天看到博客园有个面试者笔试出现此题,昨天大概给出思路,今天经过思考将实现,并做出优化改进 ,逻辑易懂,基本都可以看懂,经过初步测试正确。代码如下: 1// MindryBuffer.cpp : 定义控制台应用程序的入口点。2//3 4 #include "stdafx.h" 5 #include <iostream>6 #include <string.h>7usingnamespace std;8 9class CMindryBuffer10{11public:12 CMindryBuffer(int iBufLenth = MindryBufferLenth);13 ~CMindryBu...

[c/c++奇技淫巧]不用循环判断输出5到1【代码】【图】

偶尔看到的一道题,和哥们几个讨论了一下,这玩意,不是循环就是递归了么,当然,只要达到目的,管他什么循环递归,对吧。现在总结一下我们能想到的所有的方法,大家有新的想法欢迎跟帖讨论~~ ok,开工。 第一条,最简单的,直接输出。(因为输出结果都差不多,就不一个一个截图了)printf("5 4 3 2 1\n"); 第二条,简单的循环。 // for 循环 for(int =5; i !=0; i--) { printf("%d\n",i); } // while 循环 ...

循环链表简单操作 C++【代码】【图】

带有头节点的循环链表。头节点的数据域为空,在查找某元素是否在链表中时,可用与存放该元素。头节点的next指针指向第一个元素。最后一个元素指向头节点。如图: //CircularList.h文件#pragma once template<class T> struct listNode{T element;listNode<T>* next;listNode(){}listNode(const T&theElement){ this->element = theElement; }listNode(const T&theElement, listNode<T>*theNext){ this->element = theElement; th...

约瑟夫问题的C++简单实现(循环链表)

[code=C++] /* author:jiangxin Blog:http://blog.csdn.net/jiangxinnju Function:method of Josephus question */ #include <iostream>using namespace std;struct node { int seq; node *next; }; typedef struct node NODE;void test_Josephus() { /*假设共有n人,从第s个人开始数数,每数到m该人出列,后面的人重新开始数,知道全部人出列*/ int n,s,m; NODE *head,*last,*current,*prev; ...

循环链表的创建、插入、删除、逆序、显示(C++实现)【图】

对于单链表,因为每一个结点仅仅存储了向后的指针。到了尾标志就停止了向后链的操作,这样,其中某一结点就无法找到它的前驱结点了。 对于单链表的操作大家能够看我的这篇博客http://blog.csdn.net/zxnsirius/article/details/51183055我们将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成了一个环。这样的头尾相接的单链表称为单循环链表,简称循环链表。以下是循环链表的综合操作的样例程序执行结果/*‘)...

C++中循环控制语句

循环控制语句更改执行的正常序列。当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。C++ 提供了下列的控制语句。点击链接查看每个语句的细节。控制语句描述break 语句终止 loop 或 switch 语句,程序流将继续执行紧接着 loop 或 switch 的下一条语句。continue 语句引起循环跳过主体的剩余部分,立即重新开始测试条件。goto 语句将控制转移到被标记的语句。但是不建议在程序中使用 goto 语句。注意:您可以按 Ctrl ...

C++PrimerPlus 练习题 循环【代码】

第四题 单利和复利// 单利投资和复利投资 本金为100元int count = 1;// 本金int principal = 100;// A的第一年的收获float a_alone = principal * 0.1;// B第一年的收获 利息float b_double = principal * 0.05;// b 收获的总和float b_Allhavest = b_double;while (b_Allhavest < a_alone * count){b_double += b_double * 0.05;b_Allhavest += b_double;cout << "b的利息-------" << b_double << endl;count++;}int year =...

C++ 循环队列实现缓冲类【代码】

好久没有写博客了,前段时间做项目需要一个缓冲机制用来缓存视频帧。下面是自己实现的视频缓冲类。在此类中用循环队列实现了视频帧数据的入队、出队。在类中使用互斥对象避免出入队出现错误。下面是代码。 /*****************头文件****************/using namespace std;#define MAXSIZE 50typedef struct {int iSize;//数据的大小char *cdata; }bufData; typedef struct {bufData mdata[MAXSIZE];int iRead;//队头int iWrite...

深入学习c++--智能指针(二) weak_ptr(打破shared_ptr循环引用)【代码】【图】

1. 几种智能指针1. auto_ptr: c++11中推荐不使用他(放弃)2. shared_ptr: 每添加一次引用 就+1,减少一次引用,就-1;做到指针进行共享3. unique_ptr: 一个指针同时只能有一个使用者使用4. weaked_ptr: 与shared_ptr搭配使用1.1 weak_ptr参考:https://zh.cppreference.com/w/cpp/memory/weak_ptrstd::weak_ptr 是一种智能指针,它对被 std::shared_ptr 管理的对象存在 非拥有性(“弱”)引用。在访问所引用的对象前必须 先转换为 ...

map,vector 等容器内容的循环删除问题(C++)【代码】

map,vector 等容器内容的循环删除问题(C++) map,vector等容器的循环删除不能用普通的方法删除:for(auto p=list.begin();p!=list.end();p++)list.erase(p);类似的方式,会出错的,不信你调试试试 :)这里使用了一个` iterator` 的一个自增/自减 ,来巧妙的实现了, 删除当前的`iterator,` 但是有给当前的`iterator`赋值为其下一个的操作,不至于删除后,当前的 `iterator` 就失效了! 代码: 1 #include <iostream>2 #include <vector>3 #inc...

循环队列/顺序队列(C++)【代码】【图】

队列(queue)是一种限定存取位置的线性变。他允许在表的一端插入,在另一端删除。这个和计算机调度策略中的先来先服务FCFS(First Come/First Served)是一样的。队列中可以插入的一端为队尾(rear),允许删除的一端称为队头(front)。队列也分为两种,一种是用数组的存储表示,一种是基于链表的存储表示。基于数组的存储表示的队列被称为顺序队列。其数据成员包括,一维数组elements用来存储数据,指针front和rear用来指示队尾队...

循环双向链表的C++实现【代码】

循环双向链表的增删查改等基本操作#include<iostream> #include<assert.h> using namespace std; typedef int DataType; struct ListNode {DataType _data;ListNode* _prev;ListNode* _next;ListNode(const DataType& x):_data(x),_prev(NULL),_next(NULL){}ListNode():_data(0),_prev(NULL),_next(NULL){} }; class List { private:ListNode _head; public:List(){_head._prev=&_head;_head._next=&_head;}~List(){clear();}void ...

单链表,循环链表,双向链表(C++实现)【代码】【图】

首先是单链表(带附加表头),实现类代码如下: 1 template<class T>2struct LinkNode{//链表节点 3 T data;4 LinkNode *link;5 LinkNode(const T& args,LinkNode<T> *ptr=NULL){6 data=args;7 link=ptr;8 }9};10 11 template<class T>12class List{//带附加头节点的单链表 13protected:14 LinkNode<T> *first;//链表头指针 15public:16 List(){17 first=new LinkN...