`
febird
  • 浏览: 256487 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C 语言实现的 stl-like 算法

    博客分类:
  • C++
阅读更多

使用类似BOOST.PP技巧,自动生成代码,效率上小胜stl,主要抽象出一般的(sort/heap/search)算法中的compare,按成员类型、偏移、类尺寸分派至不同函数;性能比stl相应算法还略高,用法更简单:

#include <febird/c/algorithm.h>

using namespace std;

struct A { int x, y; }; // x, y can be all base type: char/float/double/ptr etc...
struct Compare_A_x // only needed by std algorithm, maybe cause code explosion
{
	bool operator()(const A& x, const A& y) const { return x.x < y.x; }
	bool operator()(const A* x, const A* y) const { return x->x < y->x; }
};
void foo(std::vector<A>& va, std::vector<A*>& vpa)
{
	// febird_sort_xxx is macro, called a C function, will not cause code explosion
	// more fast 15% than std::sort
	febird_sort_field(&*va.begin(), va.size(), x); // in cpp, auto deduce type of x
	febird_sort_field_c(&*va.begin(), va.size(), x, tev_int); // in C, can not deduce type of x
	std::sort(va.begin(), va.end(), Compare_A_x());

	febird_sort_field_p(&*vpa.begin(), vpa.size(), x); // in cpp, auto deduce type of x
	febird_sort_field_pc(&*vpa.begin(), vpa.size(), x, tev_int); // in C, can not deduce type of x
	std::sort(vpa.begin(), vpa.end(), Compare_A_x());
}

 

 

 项目地址:http://code.google.com/p/febird

2
0
分享到:
评论

相关推荐

    国外一个很好的C++ tree 库

    标题中提到的“国外一个很好的C++ tree库”可能指的是STL中的`std::set`或`std::map`,它们在内部实现为红黑树,或者是其他第三方库,如` Boost.Graph`库中的树结构。不过,由于具体库名未给出,我们将以一般性的...

    effective stl 中文 pdf

    算法:条款30至条款37讲解了STL算法的正确使用和注意事项,包括目的范围检查、排序选项了解、remove-like算法后使用erase、以及算法适用的数据范围。 仿函数和函数对象:条款38至条款42介绍了仿函数和函数对象的...

    Effictive STL CHM中文版

    》灰《《常好的STL教程Effective STL 目录 容器 条款1: 仔细选择你要的容器 条款2: 小心对“容器无关代码”的幻想 条款3: 使容器里对象的拷贝操作轻量而正确 条款4: 用empty来代替检查size是否为0 条款5: ...

    Effetive STL.doc

    - 条款32和33提醒在使用remove-like算法后,应配合erase以正确删除元素。 - 条款34和35关注哪些算法需要有序区间,以及如何进行忽略大小写的字符串比较。 5. 仿函数和函数对象: - 条款38建议仿函数类采用值传递...

    STL port

    STL(Standard Template Library,标准模板库)是C++编程语言中的一个重要组成部分,它提供了一系列高效、可重用的容器、算法和迭代器等数据结构和编程工具。STLport是一个独立实现的STL,旨在提供跨平台的兼容性和...

    EFFECTIVE STL 中文版(大全)(word版)

    条款32建议在使用remove-like算法后立即调用erase,以提高效率。条款35介绍了如何通过mismatch或lexicographical_compare实现忽略大小写的字符串比较。 函数对象,也称为仿函数,是STL中用于定制算法行为的关键组件...

    C++ STL PBDS库讲解

    在计算机科学和软件开发领域中,C++ 标准模板库(STL)是一个强大的工具集,它包含各种数据结构和算法,用于简化编程任务。PBDS库(Policy-Based Data Structures Library)是C++ STL的一个扩展库,它提供了一系列...

    STL like OpenCV wrapper-开源

    STL (Standard Template Library) 是 C++ 标准库的一部分,它包含了一组高效、泛型的容器、迭代器和算法。OpenCV(Open Source Computer Vision Library)则是一个广泛使用的计算机视觉库,提供了丰富的图像处理和...

    Effetive STL

    33. 指针容器与remove-like算法:使用这类算法时要小心,以免丢失元素。 34. 注意需要有序区间的算法:如binary_search、lower_bound、upper_bound等。 35. 忽略大小写字符串比较:通过mismatch或lexicographical...

    D语言的中文文档

    D语言是一种现代、系统级的编程语言,设计目标是提供高性能、简洁的语法以及对C/C++代码的良好兼容性。这个中文文档集旨在为学习和使用D语言的开发者提供全面的指导和支持。以下是对文档中可能包含的关键知识点的...

    mingw-w64-v5.0.2.zip

    7. **C++ STL**:此版本可能包含了改进的C++标准模板库,例如STL容器、算法和迭代器,以及C++11和更高版本的新特性支持。 使用 Mingw-w64-v5.0.2,开发者可以在Windows系统上进行跨平台开发,因为编译器遵循了GNU的...

    think like cs with cpp

    《Think Like CS with C++》是一份专门针对深入学习C++编程语言的英文参考资料,共有23个章节的HTML文档,旨在帮助读者理解和掌握计算机科学(CS)的核心概念,并通过C++这一强大语言来实现这些概念。C++是一种静态...

    Think C++ How to think like a computer scientist.pdf

    4. **STL(标准模板库)**:STL包含了一系列容器(如vector、list、set等)、迭代器、算法和函数对象,为程序员提供了丰富的工具,简化了数据结构和算法的实现。 5. **内存管理**:C++提供了对内存的直接控制,允许...

    多个模拟电梯程序(Java C C++ )

    在Java、C和C++这三个编程语言中,它们各有特点和适用场景,但都可用于实现这样的系统。 首先,让我们从Java开始。Java以其跨平台性和强大的并发库而闻名,`java.util.concurrent`包提供了丰富的线程管理和同步工具...

    如何像计算机科学家一样思考:C ++版本How To Think Like A Computer Scientist: C++ Version

    书中可能会介绍一些常用的标准库组件(如STL)以及如何利用第三方库来扩展C++的功能。 ### 结语 《如何像计算机科学家一样思考:C++版本》不仅是一本教授C++语言的书籍,更是一本旨在培养读者成为优秀问题解决者的...

    2022年C语言笔试面试题整理.doc

    这 10 道题涵盖了 C 语言和 C++ 的多方面知识点,包括变量的存储大小、指针和数组的存储方式、结构体的存储方式、递归函数、字符串操作、链表的操作、数组操作、文件操作、排序算法、二进制操作、字节存储次序等。...

Global site tag (gtag.js) - Google Analytics