![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
Endless丶Go
游戏服务器研发
展开
-
面向对象三大特性
目录1.1面向对象三大特性1.1.1封装Encapsulation1.1.2继承 Inheritance1.1.3多态 Polymorphism1.1.4小结1.1.5更多1.1面向对象三大特性封装、继承和多态是面向对象程序设计(Object-oriented programming,OOP)的三大特性,那么各自有哪些优势,又在哪应用呢?1.1.1封装Encap...原创 2020-03-30 15:18:38 · 1584 阅读 · 0 评论 -
希尔排序
//希尔排序template<typename T>void ShellSort(T arr[], int n){ for(int d=n/2;d>=1;d/=2) { for (int i = d; i < n; i++) { T temp = arr[i]; int j = i;//保存元素temp应该插入的位置 for (; j ...原创 2018-07-28 22:39:02 · 121 阅读 · 0 评论 -
冒泡排序与改进
基本冒泡排序思路:一趟冒泡排序对相邻元素进行比较,无序则进行交换。改进思路:对无序区域边界进行标记,若有序区域范围较大,进行下一趟冒泡排序时可以提前结束。//冒泡排序template<typename T>void BubbleSort1(T arr[], int n){ for (int i = 0; i < n; i++) { //一趟冒泡排序 ...原创 2018-07-28 21:42:17 · 844 阅读 · 0 评论 -
插入排序
插入排序及改进//插入排序template<typename T>void InsertionSort(T arr[], int n){ for (int i = 1; i < n; i++) { //寻找arr[i]合适的插入位置 //写法1 /*for (int j = i; j > 0; j--) { if (arr[j ...原创 2018-07-28 18:37:47 · 116 阅读 · 0 评论 -
关于vector的容量增长问题
“默认情况下,C++标准库提供了合理的性能”。如果你对“合理的”一词暗含的意思有过好奇,请接着读下去…… 引言 假设我们希望从一个文件中将一串类型为double的值读进一个数据结构中,从而允许我们高效地访问这些值,通常的方法如下: vectordouble> values;double x;while (cin >> x) values.push_back(x);转载 2017-04-22 13:48:17 · 1495 阅读 · 1 评论 -
vector空间重新配置后指向原vector的所有迭代器失效
对于下面这段话的理解,来自《STL源码剖析》第四章:#include#includeusingnamespacestd;voidmain(){ vectorint>ivec(2,9); cout"size="ivec.size()endl; cout"capacity="ivec.capacity()endl;原创 2017-05-23 11:30:27 · 331 阅读 · 0 评论 -
C++声明和定义的区别
C++声明和定义的区别收藏 《C++Primer》第四版2.3.5节中这么说到:①变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。②变量声明:用于向程序表明变量的类型和名字。③定义也是声明:当定义变量时我们声明了它的类型和名字。④extern关键字:通过使用extern关键字声明变量名而不定义它。转载 2017-04-12 10:17:02 · 257 阅读 · 0 评论 -
C++基础积累(1)using namespace potter 自定义命名空间和使用
欢迎转载,转载时请注明出处:http://blog.csdn.net/aa4790139/article/details/8096741using namespace 你会发现有n多篇文章,但基本上就是那篇文章在不停的转载,我觉得也没觉得多清楚,就说的大家都懂得,防止命名冲突...自定义命名空间和自定义命名空间的使用并没有将,今天终于理解透了....在此分享给大家.... 1、自定义命转载 2017-04-10 14:28:21 · 745 阅读 · 0 评论 -
C++容器中 size(), capacity, reserve() ,resize() 函数讲解
转自http://blog.csdn.net/youxin2012/article/details/9213539#size()指 目前存在的元素数。 元素个数capacity()指 容器能存储 数据的个数 容器 容量reserve()指定 容器 能存储数据的个数resize() 重新 指定 有效元素的个数 ,区别与reserve()指定 容量转载 2017-03-12 20:56:16 · 2543 阅读 · 0 评论 -
归并排序及改进
template<typename T>void __Merge(T arr[], int l,int mid, int r){ T* arr1 = new T[r - l + 1]; int k = 0, i = l, j = mid + 1; for (; k < r - l + 1 && i<=mid &&j<=r; ...原创 2018-07-28 23:41:50 · 573 阅读 · 0 评论 -
归并排序迭代版
template<typename T>void __Merge(T arr[], int l,int mid, int r){ T* arr1 = new T[r - l + 1]; int k = 0, i = l, j = mid + 1; for (; k < r - l + 1 && i<=mid &&j<=r; ...原创 2018-07-29 18:03:41 · 811 阅读 · 0 评论 -
【C++11新特性】 C++11智能指针之shared_ptr
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Xiejingfa/article/details/50750037 </div> <li...转载 2019-06-11 20:42:19 · 646 阅读 · 1 评论 -
LeetCode 数组
LeetCode 283. Move Zeroesclass Solution {public: void moveZeroes(vector<int>& nums) { //[0,j)存非0元素,i表示待访问的元素,[j,i)存0元素 int j = 0; for(int i=0; i<nums.size(...原创 2018-08-05 19:12:45 · 168 阅读 · 0 评论 -
随机生成算法测试用例和性能测试
1、生成大量随机数2、传入函数指针,对不同的排序算法进行统一的性能测试//main.cpp#include <iostream>#include <string>#include "SortTestHelper.h"template<typename T>void SelectSort(T arr[], int n){ //寻找[i,n...原创 2018-07-27 23:38:49 · 1541 阅读 · 0 评论 -
二分查找算法
二分查找基本思路:对于有序的数组,待查找的元素与数组区间的中间值进行比较,若恰好是待查找的元素,则返回索引,否则根据大小关系在中间值的左右区间内继续查找。这里关键是对数组区间的定义,不同的定义写出的代码不一样,需要了解自己定义的变量含义!1、闭区间template<typename T>int binarySearch(T arr[], int n, T target)...原创 2018-08-05 12:57:58 · 251 阅读 · 0 评论 -
选择排序加入模板和自定义类型
将选择排序算法变成模板函数,并且加入自定义类型Student//main.cpp#include <iostream>#include <string>#include "Student.h"template<typename T>void SelectSort(T arr[], int n){ //寻找[i,n)区间内的最小值 for ...原创 2018-07-27 01:15:38 · 202 阅读 · 0 评论 -
选择排序
重新开始算法之旅,从最简单的排序算法开始,每天积累一点点。 选择排序基本思路:每轮循环中找出待排序元素中最小的一个。 下面是C++代码#include <iostream>void SelectSort(int arr[], int n){ //寻找[i,n)区间内的最小值 for (int i = 0; i < n; i++) {...原创 2018-07-27 00:36:33 · 104 阅读 · 0 评论 -
快速排序及改进
快速排序基本思路:找到一个标定点,左边的元素小于标定点,右边元素大于标定点,然后再对左右区间递归快速排序。// 对arr[l...r]部分进行partition操作// 返回p, 使得arr[l...p-1] < arr[p] ; arr[p+1...r] > arr[p]template <typename T>int __partition(T arr[],...原创 2018-07-30 00:02:48 · 5026 阅读 · 0 评论 -
C++ 顺序容器的一些操作
转载 2017-03-12 16:06:39 · 221 阅读 · 0 评论 -
c++ list, vector, map, set 区别与用法比较
转自http://blog.csdn.net/super_level/article/details/41733961List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入转载 2017-03-11 17:26:01 · 202 阅读 · 0 评论 -
C++标准库bitset对象的初始化及操作
标准库提供的 bitset 类简化了位集的处理。 bitset对象的定义和初始化如下图:多种bitset操作如下两图:最后简单编写代码测试bitset对象:#include #include using namespace std;int main(){ bitset bitvec; //初始化16位,全0 bool is_set = bit原创 2017-01-13 11:06:54 · 3122 阅读 · 0 评论 -
VS2010中文注释带红色下划线的解决方法
转自 http://blog.csdn.net/whatday/article/details/7856323环境:Visual Studio 2010问题:代码中出现中文后会带下划线,很多时候感觉很不舒服。找了很久的原因没找到,后来无意中在VisualAssist X里找到了解决办法。1.安装完Visual Assist X后会在VS2010的菜单栏出现VAssistX这个选项,单击展开,选择转载 2017-01-13 10:46:23 · 2799 阅读 · 1 评论 -
vector对象的初始化
vector 不是一种数据类型,而只是一个类模板,可用来定义任意多种数据类型。vector 类型的每一种都指定了其保存元素的类型。因此,vector 和 vector 都是数据类型。 下表是vector的几种初始化方式:如果没有指定元素的初始化式,那么标准库将自行提供一个元素初始值进行值初始化(value initializationd) 。这个由库生成的初始值将用来初始化容原创 2017-01-12 17:26:16 · 895 阅读 · 0 评论 -
关于“头文件用于声明而不是用于定义”的理解
《C++ Primer 中文第四版》 2.9节中提到“头文件用于声明而不是用于定义”于是写了简短的几行代码理解了一下,编写一个头文件”a.h”和一个源文件”a.cpp”。 头文件”a.h”先定义整型变量iint i ;//此处定义i源文件”a.cpp”重定义了变量i#include <iostream>#include "a.h"int i;//全局作用域,会产生重定义错误int m原创 2017-01-11 17:24:35 · 350 阅读 · 0 评论 -
string对象的初始化和一些操作
#include #include using namespace std;int main(){ string mystr ("WonderChaos");//mystr初始化为一个字符串字面值副本 string answer;//默认构造answer为空串 if (mystr.empty())//1代表string为空串 { answer = "是空串。"; } els原创 2017-01-12 10:05:19 · 774 阅读 · 0 评论 -
<string> 与<string.h>、<cstring>的区别
转自http://blog.csdn.net/luoweifu/article/details/20242307#comments<string.h><string.h>是C版本的头文件,包含比如strcpy、strcat之类的字符串处理函数。<cstring>在C++标准化(1998年)过程中,为了兼容以前,标准化组织将所有这些文件都进行了新的定义,加入到了标准库中,加入后的文件名就新增了转载 2017-01-12 15:52:26 · 249 阅读 · 0 评论 -
switch内部的变量定义
转自 http://blog.csdn.net/u012372584/article/details/38903005————————————————————————C++primer:对于switch结构,只能在它的最后一个case标号或default标号后面定义变量:case true:// error:declaration precedes a case label, skippe转载 2017-01-16 18:09:42 · 1851 阅读 · 0 评论 -
C++运算符优先级
转自 http://blog.csdn.net/nicky_zs/article/details/4053146优先级 操作符 描述 例子 结合性1() [] -> . :: ++ –调节优先级的括号操作符 数组下标访问操作符 通过指向对象的指针访问成员的操作符转载 2017-01-16 10:21:43 · 286 阅读 · 0 评论 -
复制形参的局限性
复制实参在以下的情况不太合适:当需要在函数中修改实参的值时。当实参传递为大型对象时。对实际应用而言,复制对象所付出的时间和存储空间代价过大。当没有办法实现对象的复制时。此时有效的解决办法是将形参定义为引用或指针类型。 参见《C++ Primer》第四版7.2.1节。原创 2017-01-19 12:31:53 · 219 阅读 · 0 评论 -
C++的const类成员函数
转自http://blog.csdn.net/lihao21/article/details/8634876 我们知道,在C++中,若一个变量声明为const类型,则试图修改该变量的值的操作都被视编译错误。例如,[cpp] view plain <a href="#" class="CopyToClipboard"转载 2017-01-20 20:15:58 · 398 阅读 · 0 评论 -
C++标准库与标准模板库STL
转自原文http://blog.csdn.net/sxhelijian/article/details/7552499C++强大的功能来源于其丰富的类库及库函数资源。C++标准库的内容总共在50个标准头文件中定义。在C++开发中,要尽可能地利用标准库完成。这样做的直接好处包括:(1)成本:已经作为标准提供,何苦再花费时间、人力重新开发呢;(2)质量:标准库的都是经过严格测试的,正确性有保证;(转载 2017-03-11 10:16:12 · 306 阅读 · 0 评论 -
C++ 顺序容器小结
C++ Primer 中文第四版中,第九章 容器和算法:标准库定义了顺序容器和关联容器。顺序容器(sequential container):将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素。顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定。标准库定义了三种顺序容器类型:vector、list 和 deque(是双端队列“double-ende原创 2017-03-11 10:20:09 · 222 阅读 · 0 评论 -
C++定义容器元素为容器类型时的>操作符
在《C++ Primer 4》中第九章顺序容器,有个地方提到在指定容器元素为容器类型时,必须使用空格将两个相邻的>号隔开,否则系统会认为>>是右移操作符,并导致编译错误。然而实际测试(在VS 2005中)并无报错:#include using namespace std;int main(){ vector avec; vector> bvec; //ok vector原创 2017-03-11 16:08:57 · 353 阅读 · 0 评论 -
C/C++中堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是转载 2017-03-10 23:03:45 · 466 阅读 · 0 评论 -
值得推荐的C/C++框架和库 (真的很强大)
值得学习的C语言开源项目- 1. WebbenchWebbench是一个在Linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.c转载 2017-03-17 16:05:41 · 427 阅读 · 0 评论 -
C++在delete指针后要赋值为NULL
转自http://blog.csdn.net/u014597198/article/details/52327964C++标准规定:delete空指针是合法的,没有副作用。所以我们在Delete指针后赋值为NULL或0是个好习惯。对一个非空指针delete后,若没有赋NULL,若再次delete的话有可能出现问题。如下代码:可以看出delete是释放指针指向的内存,转载 2017-03-08 09:27:10 · 554 阅读 · 0 评论 -
C++的tie()函数
链接:http://tech.quarkjoker.com/2011/06/22/C++%E7%9A%84tie()%E5%87%BD%E6%95%B0今天看C ++ primer 时,看到了iOS::tie() 函数。不明白其含义,跟不知道作用。于是上网查了一下。cplusplus.com 给出的定义是:ostream* tie ( ) const; //返回指向绑定的输转载 2017-01-21 19:04:36 · 6973 阅读 · 1 评论 -
c++ iostream库的一些讨论
转自http://blog.csdn.net/tl437002770/article/details/51102968?locationNum=11 大家好,今天慕晓君给大家介绍的是c++中常见的I/O库:iostream,介绍的结构如上图所示,iostream库主要包含两个类型(类),输入流istream和输出流ostream,输入流中主要使用的对象是cin,表示将控制转载 2017-01-21 11:35:47 · 369 阅读 · 0 评论 -
C++标准库与STL的关系
转自http://blog.csdn.net/nodeathphoenix/article/details/32942157STL即标准模板库(Standard Template Library),它包括五大类组件:算法、容器、迭代器、函数对象、适配器。STL是C++标准库的一部分,但不是全部。C++标准库是std名字空间中的所有内容,就是那些不带.h的头文件,如<cstdio>、<iostrea转载 2017-01-15 12:01:16 · 744 阅读 · 0 评论