
c++
文章平均质量分 57
Qiana_Wu
坚持不懈的编程
展开
-
C++中的几个概念
C++中的几个概念1.命名空间 关键字:namespace 目的:为了解决变量命名冲突的问题,同一个变量名a在不同的作用域下,含义是不同的。#include<iostream>using namespace stdnamespace AA1{ int a =10;//在AA1::a中}namespace AA2{ int a = 20;//在AA2::a中 name原创 2017-06-25 17:01:45 · 443 阅读 · 0 评论 -
右值引用
右值引用是C++11提出的新概念,通过这些操作,可以降低拷贝带来的消耗。左值和右值左值一般位于赋值号的左边,指的是一个对象本身,或者是一个持久的值,可以被多次引用和使用。例如赋值的返回值、下标操作、解引用以及前置递增等。左值必须在内存中有实体。右值是一个短暂的值,代表对象的值,一般不可以引用,只在当前的表达式中有效。比如一个表达式的求值结果、函数返回值以及一个字面值等。(不一定是赋值号右边的值)右...原创 2018-04-16 23:33:36 · 405 阅读 · 0 评论 -
memcpy和memmove
memcpy功能:内存拷贝函数,从数据源拷贝num个字节的数据到目标数组函数原型:void * memcpy ( void * destination, const void * source, size_t num );函数参数:destination:指向目标数组的指针source:指向数据源的指针num:要拷贝的字节数使用方法:#include<stdio.h>#include...原创 2018-04-17 17:12:23 · 825 阅读 · 0 评论 -
std::strcpy、strncpy、memset、memcpy用法
转载自:https://blog.youkuaiyun.com/jin13277480598/article/details/535422091. std::strcpy 功能:将一个字符串复制到另一个字符串(如果字符串重叠,该行为是未定义); 定义于头文件 <cstring> char *strcpy( char *dest, const char *src );参数: dest :指向复...转载 2018-04-17 17:37:28 · 598 阅读 · 0 评论 -
动态内存管理
内存: 内存又叫内存储器,在冯诺依曼体系结构中,外设不能和CPU直接进行数据交流,外设可以和内存进行输入和输出,内存可以和CPU(运算器和控制器)进行数据交流。程序运行是要加载到内存中才能执行,变量需要申请内存才能被执行。申请了资源(内存)就要释放资源,不进行释放,CPU占有量会越来越大,其他进程就申请不到资源,就会造成内存泄露,对于普通的电脑来说,最终的结果就是关机,但对于大型服务器来...原创 2018-04-13 21:42:57 · 515 阅读 · 0 评论 -
指针和引用
1. 指针:指针是一个变量(对象),它的内容是一个地址,指向内存的一个存储单元。通过修饰符“*”来表示,解引用 *p 来表示指针p所指对象的值。指针在逻辑上是独立的,可以改变,比如指针变量的值和指针变量指向的内存的值都是可以改变。不同类型的指针可以指向特定类型的对象,即指针的类型要与所指向的对象的类型一致。可通过指针的指向来改变所指向的对象的值。const指针:常量指针const int *p;...原创 2018-04-20 00:01:17 · 275 阅读 · 0 评论 -
智能指针
本文主要讨论C++标准库中的auto_ptr,boost库中的scoped_ptr, shared_ptr, weak_ptr1.什么是RAII RAII全称为Resourse Acquisition Is Initialization,意为资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成自愿的清理,可以保证资源的正确初始化和...原创 2018-07-30 20:51:41 · 246 阅读 · 0 评论 -
使用C语言判断一个机器是大端机还是小端机
1.什么是大端,什么是小端?大端:数据的高位字节存放在低地址内,数据的低位字节存放在高地址内。小端:数据的高位字节存放在高地址内,数据的低位字节存放在低地址内。一个整型是4个字节,如:0x1a2b3c4d。电脑读取内存数据时,是从低位地址到高位地址进行读取(从左到右)。在小端机器中从低地址到高地址的存放方式为:0x4d,0x3c,0x2b,0x1a;(低地址存低位)在大端机器中...原创 2018-07-27 17:57:31 · 6116 阅读 · 3 评论 -
STL之Stringstream字符串流使用总结
转载自:https://blog.youkuaiyun.com/fanyun_01/article/details/66967710如果你已习惯了<stdio.h>风格的转换,也许你首先会问:为什么要花额外的精力来学习基于<sstream>的类型 转换呢?也许对下面一个简单的例子的回顾能够说服你。假设你想用sprintf()函数将一个变量从int类型转换到字符串类型。为了正确地完成...转载 2018-08-10 22:26:39 · 296 阅读 · 0 评论 -
链接属性
C语言中的链接属性决定如何处理在不同文件中出现的标识符,标识符的作用域和它的链接属性有关。链接属性的分类:外部链接属性:全局标识符具有链接属性(全局变量);使用关键字extern声明的变量或函数,可以在其它的源文件中使用;外部链接属性就意味着,一个标识符,不仅可以在当前的源文件中使用,还可以在程序的其他文件中使用。test.cint g_val = 10; //具有...原创 2018-08-13 11:47:50 · 1379 阅读 · 1 评论 -
快速排序的非递归实现
快速排序的非递归主要使用栈来实现。void QuickSortNonR(int* a,int left,int right){ stack<int> s; s.push(right); s.push(left); while(!s.empty()) { int begin = s.top(); s.pop(); int end = s.top(); s.p...原创 2018-02-24 15:08:38 · 376 阅读 · 0 评论 -
堆排序
1.什么是堆? 堆其实是一颗完全二叉树,堆分为大堆和小堆。所谓大堆,就是父节点的值大于等于左右孩子结点的值,即a[i] >= a[2*i+1] && a[i] >= a[2*i+2]。所谓小堆,就是父节点的值小于等于左右孩子结点的值,即a[i] 堆排序是用堆这种数据结构设计的一种排序算法,是选择排序的一种。利用数组的特点快速定位到指定索引的元素。2.算法思想首先建一个大堆,堆顶原创 2018-01-21 22:44:26 · 239 阅读 · 0 评论 -
插入排序
插入排序 对一个已经有序的数据序列插入一个数。要求插入后此数据序列仍然有序。插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到原创 2017-11-19 11:23:51 · 768 阅读 · 0 评论 -
C++实现顺序表
C++实现顺序表顺序表是用数组来实现的,把数据放在数组中,实现其基本的增删查改。以下为实现源代码: //C++实现顺序表**strong #pragma once#include<iostream>#include<assert.h>using namespace std;typedef int DataType;class SeqListclass SeqList{ publi原创 2017-07-21 18:44:35 · 791 阅读 · 0 评论 -
C++实现单链表
链表相对于顺序表,有一个指向关系,当前节点的指针指向下一个节点,单链表是单向指向关系。此外,还有双链表,是双向指向关系。 链表主要实现数据的增删查改。具体代码实现如下://C++实现单链表#pragma once#include<iostream>#include<assert.h>using namespace std;typedef int DataType;struct SListN原创 2017-07-22 23:16:43 · 317 阅读 · 0 评论 -
C++实现双向链表
双向链表也叫双链表,它的每个数据节点有两个指针,一个指向前节点,一个指向后节点。在实现插入操作时就要注意指针的指向。以下是双链表的基本实现://C++实现双向链表#include<iostream>#include<assert.h>using namespace std;typedef int DataType;struct ListNode{ ListNode* _prev;原创 2017-07-23 18:24:21 · 589 阅读 · 0 评论 -
继承与菱形继承
1.面向对象的程序设计的三大要素是封装、继承、多态。封装是用访问限定符将成员变量和成员函数包装,以实现不同权限的访问目的,访问限定符有public、protected、private。一般的将成员函数设为private,成员函数设为public或protected。 继承是面向对象复用的重要手段,子类继承父类,是两个类型之间的关系建模,共享公有的东西,实现各自本质不同的东西。在继承关系里,派生类继原创 2017-07-26 18:39:21 · 346 阅读 · 0 评论 -
String的深拷贝
String的深拷贝是一种拷空间拷数据的方法。String的浅拷贝是一种拷数据的方法,只是将指针指向同一块空间,在析构的时候会出错,同一个空间释放多次。深拷贝就是解决浅拷贝的析构问题,但深拷贝会有开辟空间的开销。对此,提出引用计数的浅拷贝,也就是写时拷贝。写时拷贝在下一篇博客中写。 #include<iostream>using namespace std;//传统写法:开空间,拷数据cla原创 2017-07-23 21:01:04 · 1316 阅读 · 0 评论 -
String的增删查改的实现
String类主要模拟实现string(库)中字符串的增删查改操作。有插入一个字符,插入一个字符串,删除一个特定位置的字符,删除特定位置特定的字符串,头插,头删,尾插,尾删,可以复用Insert()和Erase()函数。字符串比较,字符相同则同时向后走,当字符串相同,或有不同的字符时返回相应的结果。具体操作如下:#pragma warning(disable:4996)//禁止报strcpy的错误原创 2017-07-25 17:49:24 · 699 阅读 · 0 评论 -
多态的对象模型
1:所谓多态就是多种形态,在两个类中,函数名相同的函数,通过不同对象的调用,产生不同的结果。多态和类型无关,只和对象有关。 构成多态的条件:(1)虚函数的重写:子类中和父类相同点的虚函数 (2)父类的指针/引用调用虚函数 当指向父类的指针或引用调用重写的虚函数时,当指向父类调用的就是父类的虚函数,当指向子类调用的就是子类的虚函数。 2:多态的对象模型 单继承class Base{pub原创 2017-07-31 23:59:17 · 273 阅读 · 0 评论 -
智能指针
1:智能指针的发展历史 <1>理解: 在动态内存分配中,为解决抛异常执行流跳转,导致内存泄漏的问题,产生了一个智能指针的类(smart pointer),智能指针是基于RAII的设计思想(资源分配即初始化,资源的有效期与持有对象的生命期严格绑定),期待它能像指针一样,智能的管理指针所指向的动态资源的释放。 <2>开始是auto_ptr(C++98):设计思想是管理权的转移,管理权在谁手上谁才有原创 2017-08-04 18:26:14 · 257 阅读 · 0 评论 -
string之写时拷贝
写时拷贝又叫引用计数的浅拷贝,浅拷贝不同于深拷贝的既拷空间又拷数据,浅拷贝只是拷贝数据,每开辟一块空间,随之有一个计数器,当有多个对象指向该空间时,引用计数++,每销毁一个对象,引用计数–,当引用计数为1时,才真正的销毁这块空间。第一种实现:开辟一块空间的同时,再开辟一块空间存放引用计数。 //写时拷贝(第一种)class String{public: String(char* st原创 2017-08-22 18:05:39 · 378 阅读 · 0 评论 -
类和对象
1:类和对象的相关概念 类(class/struct)是一种非基本的数据类型,包括数据(成员变量)和程序(成员函数),类的访问限定符有三种,私有(private)、保护(protected)、公有(public),通过给予成员变量和成员函数不同的访问限定符,达到限定对象访问的目的。类的访问限定符体现了面向对象的封装性。 一个类并没有分配实际的内存空间来储存它,只有当一个类实例化对象的时候,才给它分原创 2017-08-23 17:59:33 · 269 阅读 · 0 评论 -
静态数据成员和静态成员函数
转载自:https://blog.youkuaiyun.com/computer_liuyun/article/details/29235111c++中的static静态数据成员和静态成员函数应该是让大家比较头疼的东西,好像也是找工作公司面试中常常问到的东西。我自己也深有体会,在学习c++的过程中,总感觉static很烦人,但是又是一个必须懂的东西,所以今天就对静态数据成员和静态成员函数坐下小结哈!一...转载 2018-08-26 19:18:35 · 37030 阅读 · 22 评论