
C/C++
文章平均质量分 69
qs9816
这个作者很懒,什么都没留下…
展开
-
C++ std::pair, std::tuple
std::pair 定义于template struct pair;Pair of valuesThis class couples together a pair of values, which may be of different types (T1 and T2). The individual values can be accessed th原创 2013-10-12 23:22:45 · 911 阅读 · 0 评论 -
insertsort
#include void insertsort(int *arr, int length) { for (int i = 1; i != length; i++) { int newvalue = arr[i]; int pos = i; while (pos > 0 && newvalue < arr[pos - 1]) { arr[pos] =原创 2013-05-29 01:06:00 · 540 阅读 · 0 评论 -
GCC4.8发布,完成向C++的迁移
GNU编译器集合(GCC)的最新版本发布,这标志着向C++的迁移已经完成。这一过程持续了多年,GCC团队指出,为了有一个可维护的代码基来吸引并留住新的项目成员,这种迁移是必要的。之所以选择C++,部分原因是它是标准化的语言,而且 "支持更干净的代码,更容易编写并保证清晰的接口……尽管这并非灵丹妙药,但相对于基于C的遗留代码,的确是种改进”。对大部分开发者来说,最终结果不过是,如果有兴趣从源代码转载 2013-04-27 11:10:46 · 1551 阅读 · 0 评论 -
C++14快来了
C++11已经问世两年了,各大编译器也都加紧跟进对C++11的特性和库的实现(这里有一份GCC、MSVC、CLANG对C++11的支持情况表)。在我们还没有来得及消化新的C++的时候,C++标准委员会并没有停下。从C++11正式发布到今天,他们一直在为C++14(以及以后的C++17)努力工作着。 据来自C++标准委员会的网站上的一篇新闻称,用于 C++14 的投票草案已经完成。这意味着转载 2013-05-11 23:42:19 · 578 阅读 · 0 评论 -
GCC4.9 发布
在GCC 4.8发布一年零一个月之后,GCC 4.9终于发布了。GCC 4.9是一个主要版本,提供了大量新功能。下面我们来看一下:通用的优化器改进AddressSanitizer这款快速的内存错误检查程序已经支持ARM。添加了UndefinedBehaviorSanitizer(ubsan),这是一款快速的未定义行为检查程序,可以通过-fsanitize=undef转载 2014-04-25 19:09:55 · 2240 阅读 · 0 评论 -
原子操作 vs 非原子操作
在网上已经有很多有关介绍原子操作的内容,通常都是注重于原子读-修改-写(RMW)操作。然而,这些并不是原子操作的全部,还有同样重要的原子加载和原子存储。在这篇文章中,我将要在处理器级别和C/C++语言级别两个方面来对比原子加载和原子存储与它们相应的非原子部分。沿着这条路,我们将弄清楚C++11中“数据竞争”这个概念。共享内存中的原子操作是指它是否完成了一个线程相关的单步操作。当一个转载 2014-05-26 11:54:10 · 938 阅读 · 0 评论 -
C\C++代码优化的27个建议
1. 记住阿姆达尔定律:funccost是函数func运行时间百分比,funcspeedup是你优化函数的运行的系数。所以,如果你优化了函数TriangleIntersect执行40%的运行时间,使它运行快了近两倍,而你的程序会运行快25%。这意味着不经常使用的代码不需要做较多优化考虑(或者完全不优化)。这里有句俗语:让经常执行的路径运行更加高效,而运行稀少的路径正确运行。转载 2014-05-26 11:22:19 · 459 阅读 · 0 评论 -
静态库与动态库
C++静态库与动态库这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非转载 2014-07-07 22:32:44 · 446 阅读 · 0 评论 -
C++ 输出流迭代器
#include #include #include #include #include #include #include #include using namespace std;void display(vector& v, const char* c);int main() {// vector v;// string s;//// while原创 2014-07-08 12:47:17 · 566 阅读 · 0 评论 -
C++14标准已获通过
8月18日,C++标准委员会召集人Herb Sutter发表了一篇博客《We have C++14!》。Sutter宣布,经过投票,C++14标准获得一致通过。草案文档经过一定的文字润色和修正之后,将在年内提交给ISO作为正式的C++标准发布。C++之父Bjarne Stroustrup写道:“C++14按时交付了,主要的编译器提供商也已经在提供相应的实现。真是太棒了。对于想把C++当转载 2014-08-21 01:58:08 · 710 阅读 · 0 评论 -
阅读 Nginx 源码
阅读 nginx 源码Nginx是由俄罗斯软件工程师Igor Sysoev开发的一个高性能的HTTP和反向代理服务器,具备IMAP/POP3和SMTP服务器功能。Nginx最大的特点是对高并发的支持和高效的负载均衡,在高并发的需求场景下,是Apache服务器不错的替代品。目前,nginx [engine x]是Igor Sysoev编写的一个HTTP和反向代理服务器,另外它也可以作为邮原创 2014-08-17 01:25:27 · 881 阅读 · 0 评论 -
编译器学习--文法的类型
文法的类型一个文法G[S],S为启始规则,如果它的所有规则符合形如:a=>b其中a和b都是G[S]文法的符号串,但a中至少要有一个非终结符,这时G[S]文法是短语文法。G[语言]为例“宾语张三=>名词张三”是短语文法的规则,“张三编写=>名词张三”则不是短语文法,因为“张三”和“编写”都是终结符规则左则没有非终结符。我们可以看出短语文法是对规则做了一些限制后形成的,下面的文法是对短语文原创 2015-01-15 21:27:21 · 736 阅读 · 0 评论 -
C++ 模板的具体化
模板的具体化1.隐式实例化implicit instantiation声明一个或多个对象, 指出所需的类型, 而编译器使用通用模板提供的处方生成具体的类定义MyArr arr; // 而编译器做需要对象之前, 不会生成类的隐式实例化;MyArr *pt; // implicit instantiation , no object needed yetpt = n原创 2013-06-03 23:47:43 · 669 阅读 · 0 评论 -
LinkedStack, LinkedQueue
// LinedStack#include #include templatestruct StackNode { T data; StackNode *link; StackNode(T d = 0, StackNode *next = NULL) : link(next), data(d) {}};templateclass LinkedStack {原创 2013-05-10 23:03:28 · 588 阅读 · 0 评论 -
C++ find() find_if
#include #include #include int main(){ int num_to_find = 169; std::vector v; for (int i = 0; i < 20; i++) { v.push_back(i); std::cout << v[i] << ' '; } std原创 2013-05-04 02:01:10 · 567 阅读 · 0 评论 -
C++ Lambda
#include #include #include int main() { std::vector v; v.push_back(1); v.push_back(5); int total = 0; std::for_each(v.begin(), v.end(), [&total](int x){ total += x; }); st原创 2013-05-05 22:54:19 · 503 阅读 · 0 评论 -
C中static
C程序一直由下列部分组成: 1)正文段——CPU执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里。 3)非初始化数据段(bss段)——在程序中没有初始化的全局变量;内核将此段初始化为0。 4)栈——增长方向:自顶向下增长;自动变量以转载 2013-04-30 23:51:57 · 548 阅读 · 0 评论 -
几个排序
#include using namespace std;int main() {}void selectsort(int *arr, int n) { int i, j, min, temp; for (i = 0; i < n - 1; i++) { min = i; // find the min for (j = i + 1; j < n; j+原创 2013-04-30 23:34:37 · 455 阅读 · 0 评论 -
C++ std::find, std::find_if, std::find_if_not
Defined in header template class InputIt, class T >InputIt find( InputIt first, InputIt last, const T& value );(1) template class InputIt, class UnaryPredic转载 2013-05-04 01:03:31 · 961 阅读 · 0 评论 -
LinkedList
#ifndef LINKEDLIST_H#define LINKEDLIST_H#include #include #ifndef INS_FRONT_OR_REAR#define INS_FRONT_OR_REARenum INS_MOD { INS_FRONT, INS_REAR };#endiftemplatestruct LinkedNode { T data;原创 2013-05-08 00:49:16 · 538 阅读 · 0 评论 -
std::replace
std::replacetemplate void replace (ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value);Replace value in rangeAssigns new_value to all the e原创 2013-05-23 00:47:54 · 854 阅读 · 0 评论 -
PQueue
#include #include #include const int DEFAULT_PQ_SIZE = 50;templateclass PQueue {public: PQueue(int sz = DEFAULT_PQ_SIZE); ~PQueue() { delete[] elems; } bool insert(const T& x); bool re原创 2013-05-23 18:32:50 · 803 阅读 · 0 评论 -
MinHeap
#include const int DEFAULT_SIZE = 20;templateclass MinHeap {public: MinHeap(int sz = DEFAULT_SIZE); MinHeap(T arr[], int n); ~MinHeap() { delete[] heap; } bool insert(const T& x) const;原创 2013-05-23 18:33:48 · 971 阅读 · 0 评论 -
STL 函数
#include #include #include int main() { int arr[] = { 2, 3, 4, 5, 6 }; std::vector v(arr, arr + 5); int sum = std::accumulate(v.begin(), v.end(), 0); std::cout << sum << std::endl;}原创 2013-05-10 00:41:05 · 446 阅读 · 0 评论 -
C++ lambda
C++11 的 lambda 表达式规范如下:[capture](parameters) mutable exception attribute ->retury-type {statement}其中, mutable 修饰符说明 lambda 表达式体内的代码可以修改被捕获的变量,并且可以访问被捕获对象的 non-const 方法。exception原创 2016-08-09 07:56:25 · 381 阅读 · 0 评论