cout

第二讲 auto_ptr智能指针

六月ゝ 毕业季﹏ 提交于 2020-03-04 17:18:30
auto_ptr 不可被共享,只能指向一个对象 auto_ptr在构造时获取对某个对象的所有权(ownership),在析构时释放该对象。我们可以这样使用auto_ptr来提高代码安全性: int* p = new int(0); auto_ptr<int> ap(p); 从此我们不必关心应该何时释放p, 也不用担心发生异常会有内存泄漏。 这里我们有几点要注意: 1) 因为auto_ptr析构的时候肯定会删除他所拥有的那个对象,所有我们就要注意了,一个萝卜一个坑,两个auto_ptr不能同时拥有同一个对象。像这样: int* p = new int(0); auto_ptr<int> ap1(p); auto_ptr<int> ap2(p); 因为ap1与ap2都认为指针p是归它管的,在析构时都试图删除p, 两次删除同一个对象的行为在C++标准中是未定义的。所以我们必须防止这样使用auto_ptr. 2) 考虑下面这种用法: int* pa = new int[10]; auto_ptr<int> ap(pa); 因为auto_ptr的析构函数中删除指针用的是delete,而不是delete [],所以我们不应该用auto_ptr来管理一个数组指针。 3) 构造函数的explicit关键词有效阻止从一个“裸”指针隐式转换成auto_ptr类型。 4) 因为C+

守給你的承諾、 提交于 2020-03-04 16:07:12
数据结构:栈的实现 下面使用C++实现顺序栈~: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 using namespace std;template <class T>class Stack{public: Stack(int max_stack_size = 10); ~Stack(); //析构函数 bool (); //判空 bool IsFull(); //判满 T Top(); //取栈顶元素 Stack<T>& Add(const T& x); //入栈 Stack<T>& Del(T& x); //出栈 void

模拟退火算法(SAA)解决TSP问题

[亡魂溺海] 提交于 2020-03-04 07:42:49
1.什么是模拟退火算法? 模拟退火算法(Simulated Annlealing Algorithm,SAA 最早是由N.Metropolis等人在1953年提出来的。 据说是他在洗澡的时候突然想到了这个模拟退火的方式。模拟退火的原理是初始时刻从一个较高的初始温度出发,开始物质中的分子处于随机排列的状态,随着温度系数的不断降低,随后分子逐渐以低能的状态进行排列,最终达到某种稳定的状态。 物理退火 要想理解模拟退火算法,首先我们要知道物理退火是怎样实现的,物理退火的过程大致分为三个阶段: 升温过程——我们通过不断地加热,加快分子的热运动,使整个物体处于随机、无序的状态,直到物体处于一个初始的温度T。 恒温过程——因为物体时时刻刻都在与外界进行物质或是温度的交换,物体的状态总是向自由能减少的方向进行,当自由能稳定时,物体就达到了一个平衡态。 冷却过程——物体内部的分子热运动逐渐减弱并且不断地趋于有序,物体的能量就会下降,从而达到了一个低能的晶体状。 Metropolis准则 模拟退火算法其中运用到了一个很重要的准则叫做—— Metropolis准则 ,这个准则的过程如下: 1.首先设置一个初始的条件,初始次数k,初始温度T,过程中输出的解(同时也可以叫做状态)S(k),给S(k)一个初始值S(k)=S0; 2.①通过一定的方式在S(k)(当前解)的状态S上产生一个相邻的子集N(S(k)

卷积操作的参数量和FLOPs

被刻印的时光 ゝ 提交于 2020-03-04 02:47:42
卷积操作的参数量和FLOPs   这里首先需要辨析一个概念就是FLOPs和FLOPS可以看到简写的差别仅仅是一个字母大小写的区别。   FLOPS(floating-point operations per second),这个缩写长这个样子确实也很奇怪,大致概念就是指每秒浮点数运算次数,最后一个S是秒(second)的缩写,是计组中的概念,用来描述计算机的运算速度。   FLOPs(floating-point operations),一旦s变为小写,就表示复数的概念,就是浮点数运算次数,这就和计算量相关了, 和卷积或者其他算法联系起来基本上就表示计算次数,可用来衡量操作的复杂程度。   卷积的参数基本上都是说的卷积核的参数,拿一层神经网络来看,卷积核的大小是 ( k h , k w ) (k_h,k_w) ( k h ​ , k w ​ ) ,显然一个卷积核的参数量是这个卷积核的矩阵 k h ∗ k w k_h*k_w k h ​ ∗ k w ​ ,通常这里还要加上一个偏置 b b b ,算作一个参数,为了简便计算,这里忽略不计。如果说一层神经网络的输入通道数为 C i n C_{in} C i n ​ 输出通道数为 C o u t C_{out} C o u t ​ ,卷积核需要通过矩阵运算,把输入的 C i n C_{in} C i n ​ 的通道数映射为输出为 C o u

扩展堆数组的大小

我与影子孤独终老i 提交于 2020-03-01 20:54:59
函数: void* realloc(void *ptr, size_t size); 功能: 函数将 ptr 对象的储存空间改变为给定的大小 size 。 参数 size 可以是任意大小,大于或小于原尺寸都可以。 返回值是指向新空间的指针,如果错误发生返回NULL。 扩展内存 1 int main() 2 { 3 const size_t pSize = 15; 4 5 char *p = new char[pSize]{0}; 6 strcpy_s(p, pSize, "I LOVE YOU"); 7 8 cout << "p:" << hex << (int)p << endl; 9 10 p = (char *)realloc(p, pSize * 2); 12 13 if (!p) 14 cerr << "Call realloc function error!" << endl; 15 16 17 cout << "p1:" << hex << (int)p << endl; 18 _snprintf_s(p, pSize * 2, pSize * 2, "Hello,%s C++!", p); 19 cout << p<< endl; 20 21 delete[]p; 22 23 getchar(); 24 return 0; 25 } 如果没有 p = (char *

C++异常处理(throw try catch)

試著忘記壹切 提交于 2020-03-01 16:37:11
本篇转自 http://c.biancheng.net/view/422.html 程序运行时常会碰到一些异常情况,例如: 做除法的时候除数为 0; 用户输入年龄时输入了一个负数; 用 new 运算符动态分配空间时,空间不够导致无法分配; 访问数组元素时,下标越界;打开文件读取时,文件不存在。 这些异常情况,如果不能发现并加以处理,很可能会导致程序崩溃。 所谓“处理”,可以是给出错误提示信息,然后让程序沿一条不会出错的路径继续执行;也可能是不得不结束程序,但在结束前做一些必要的工作,如将内存中的数据写入文件、关闭打开的文件、释放动态分配的内存空间等。 一发现异常情况就立即处理未必妥当,因为在一个函数执行过程中发生的异常,在有的情况下由该函数的调用者决定如何处理更加合适。尤其像库函数这类提供给程序员调用,用以完成与具体应用无关的通用功能的函数,执行过程中贸然对异常进行处理,未必符合调用它的程序的需要。 此外,将异常分散在各处进行处理不利于代码的维护,尤其是对于在不同地方发生的同一种异常,都要编写相同的处理代码也是一种不必要的重复和冗余。如果能在发生各种异常时让程序都执行到同一个地方,这个地方能够对异常进行集中处理,则程序就会更容易编写、维护。 鉴于上述原因,C++ 引入了异常处理机制。其基本思想是:函数 A 在执行过程中发现异常时可以不加处理,而只是“拋出一个异常”给 A 的调用者

回文数

你离开我真会死。 提交于 2020-03-01 09:40:34
题目来源力扣第九题,链接:https://leetcode-cn.com/problems/palindrome-number 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 进阶: 你能不将整数转为字符串来解决这个问题吗? 思路0: 1. 题目给出模板为int类型,故默认为是int类型数据。 2. 如果整数是负数则直接判定false 3. 如果整数是正整数且只有一位,则直接判定true 4. 将数据进行反转处理,若与原数据相等,则返回true,反转处理见: https://www.cnblogs.com/yulongzhou/p/12385877.html 5. 空间复杂度 O(1), 时间复杂度O(log(x)) 代码: 1 #include <iostream> 2 3 using namespace std; 4 5 class Solution { 6 public: 7 bool isPalindrome(int x) { 8 if (x

c++ unit testing check output is correct

大兔子大兔子 提交于 2020-03-01 02:34:28
问题 If I want to write my own test.cpp that checks if another .cpp file is outputting the way I want it to output, is there anyway to do it without explicitly printing it? In other words, is there anything such as assert(output_of_file_being_tested, "this is the correct output"); where output_of_file_being_tested is something that's supposed to be "cout"ed. 回答1: The solution is not to hard-code the output stream. Pass a reference to std::ostream to your code somehow, and use std::stringstream to

c++vector动态数组应用及函数(笔记)

北城以北 提交于 2020-02-29 19:21:28
vector动态数组应用及函数 开始先碎碎念一下下 vector动态数组是c++中一个常用的容器 它相比于c语言中的数组 多了很多功能 方便了使用 由于接触c++以来 还一直保持着c语言风格的代码 确实有点大材小用 就把笔记总结一下 方便学习 加深记忆 vector头文件 使用vector 首先要添加vector 头文件 # include <vector> vector的创建(1) 可以创建各种类型的vector动态数组 :整形,浮点型,字符型,对象类,字符串型都可以 创建方法也是类似的 vector < int > ivec ; //保存int类型的动态数组 vector < string > svec ; // 保存string类型的动态数组 vector < char > cvec ; //保存char类型的动态数组 vector < double > dvec ; //保存double类型的动态数组 vector的创建(2) 当然 如此牛批 强大的vector 也可以在进行创建的同时 做到一些 牛批 的初始化工作 比如 vector < int > ivec ( 10 , 1 ) ; //初始化为存有10个1的动态数组 vector < string > svec ( 10 , "hi" ) ; //当然这就是 10个string类型的 hi vector < char

自考新教材--p152

依然范特西╮ 提交于 2020-02-29 18:29:18
源程序: //"+"、"-"运算符重载 #include <iostream> using namespace std; class myComplex { private:   double real, imag; public:   myComplex();   myComplex(double x, double i);   void outCom();   myComplex operator-(const myComplex &c);   friend myComplex operator+(const myComplex &c1, const myComplex &c2);//声明友元函数 }; myComplex::myComplex() {   real = 0;   imag = 0; } myComplex::myComplex(double r, double i) {   real = r;   imag = i; } void myComplex::outCom() {   cout << "(" << real << "," << imag << ")"; } myComplex myComplex::operator-(const myComplex &c) {   return myComplex(this->real - c.real, this-