随笔分类 - C++11
摘要:郑重声明:本文是笔者根据个人理解所写,错误难免,欢迎拍砖! 可以任意转载、修改,转载时是否标明出处,随君而定!请说出如下2种方式,哪种更好,为什么?方式一:void foo(int a, float b, char* ch, double d, float f);方式二:struct A{ int a; float b; char ch[5]; double d; float f;};void foo(A* pa);咋一看,不知道这题想要考什么,无从下手。其实该题是检查考生对于内存对齐的理解。下面我们先看看关于内存的一些知识。什么是字节对齐,为什么要对齐?...
阅读全文
摘要:郑重声明:本文是笔者根据个人理解所写,错误难免,欢迎拍砖! 可以任意转载、修改,转载时是否标明出处,随君而定! 交换排序应该是交换排序里面最简单,也最容易理解的一个排序算法,比较接近人的习惯思维。扫描整个数据,从第0个元素开始,跟以后的元素逐个比较,按照排序规则(从小到大或者从大到小)交换顺序,比较完第a后再去比较第a+1个元素,以此类推。 1 template <typename T> 2 void swap(T& lhs, T& rhs) 3 { 4 T tmp = lhs; 5 lhs = rhs; 6 rhs = T; 7 } 8 9 templat...
阅读全文
摘要:郑重声明:本文是笔者根据个人理解所写,错误难免,欢迎拍砖! 可以任意转载、修改,转载时是否标明出处,随君而定! 折半插入排序(binary insertion sort)是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法来加快寻找插入点的速度。 在将一个新元素插入已排好序的数组的过程中,寻找插入点时,将待插入区域的首元素设置为a[low],末元素设置为a[high],则轮比较时将待插入元素与a[m],其中m=(low+high)/2相比较,如果比参考元素...
阅读全文
摘要:郑重声明:本文是笔者根据个人理解所写,错误难免,欢迎拍砖! 可以任意转载、修改,转载时是否标明出处,随君而定!算法思想:直接插入排序(straight insertion sort)的作法是:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。直接插入排序属于稳定的排序,时间复杂性为o(n^2),空间复杂度为O(1)。直接插入排序是由两层嵌套循环组成的。外层循环标识并决定...
阅读全文
摘要:郑重声明:本文是笔者网上翻译原文,部分有做添加说明,所有权归原文作者!地址:http://www.cprogramming.com/c++11/rvalue-references-and-move-semantics-in-c++11.htmlC++一直致力于生成快速的程序。不幸的是,直到C++11之前,这里一直有一个降低C++程序速度的顽症:临时变量的创建。有时这些临时变量可以被编译器优化(例如返回值优化),但是这并不总是可行的,通常这会导致高昂的对象复制成本。我说的是怎么回事呢?让我们一起来看看下面的代码: 1 #include <iostream> 2 #include &l
阅读全文
摘要:郑重声明:本文是笔者根据个人理解所写,错误难免,欢迎拍砖! 可以任意转载、修改,转载时是否标明出处,随君而定! range-for是C++ 11新增特性,用于循环迭代一个“范围”,该“范围”类似于包含有begin()和end()方法的STL序列容器。所有的STL标准容器都适用于该“范围”,例如vector、string等等。数组也同样可以,只要定义了begin()和end()方法的任何“范围”都可以使用for来循环迭代容器里面的元素,如istream。语法:for ( range_declaration : range_expression) loop_statement上述代码的效...
阅读全文