精华内容
下载资源
问答
  • CSTL: C语言版的STL,包含set,list,map等基本数据结构和算法
    2021-05-20 17:21:56

    README for "Translate STL 2 CL" library 1.0

    The project could be found at http://sourceforge.net/projects/tstl2cl, using 'tstl2cl' for short in the following text.

    LICENSE

    'tstl2cl' has been distributing under the zlib/libpng license, you should have already received license.txt in this folder.

    For more information about free software, you could browse http://www.opensource.org/

    WHAT IS THIS

    This directory holds a library for using standard vector list map set stack queue etc in a pure C environment.

    All those of concepts in tstl2cl are inspired by STL. You could have a look at http://www.sgi.com/tech/stl/index.html

    to know about C++ Standard Template Library i.e STL.

    WHEN TO USE

    Make sure that you are working in a C environment rather than C++ or anything else before going on reading.

    If you get boring with writing basic data struct and algorithm again and agagin in C, tstl2cl would probably be the very

    library kits for you. It will save you much of time of coding, then you could focus more on your applications' function.

    HOW TO USE

    Read documents in 'doc' folder, and many a samples could be found in 'test' folder. If you are familiar with STL, you would

    probably find that to use this library is a snap.

    TO BUILD SAMPLES

    On linux

    make clean all

    On cygwin

    make -f Makefile.win clean all

    You may have some problems to build this library in some minority C compiler, feel free to fix them. You could also report

    bugs on the project's website: http://sourceforge.net/projects/tstl2cl.

    AUTHOR

    Wenbo Lao(Rob Lao)

    viewpl(at)gmail.com

    更多相关内容
  • C语言的集合库C语言STL

    万次阅读 2016-12-26 12:48:14
    C语言STL模板的,好吧,我承认,用集合来描述比较合适。下面是项目地址:  https://github.com/mtaxot/c-collection  java用的是集合框架,当然我这个目前还谈不上一个功能全面的C语言集合库,实现这个集合...



        不知道这个题目是否合适,因为C语言是没有模板的,好吧,我承认,用集合来描述比较合适。下面是项目地址:

        https://github.com/mtaxot/c-collection

        那么强大的C语言,当打开vim,想干什么却不得不重造轮子,想想就累。其实Java为什么那么好用,很大一部分原因是Java没有指针,还有一部分原因是Java有集合框架,拿过来ArrayList, HashMap 用起来相当的方便。而C++因为STL是标准库,所以用起来也好方便。为什么C语言这么悲催,找个哈希表都这么难,哎,轮子还是得造。


         java用的是集合框架,当然我这个目前还谈不上一个功能全面的C语言集合库,实现这个集合功能的想法来自Linux内核代码的list.h,当然我的实现和内核的实现还是很不一样的,我这个实现比较简单,当然没有内核的实现那么通用。不过对于一般的工程来说,这个实现版本足够通用。下面介绍一下实现思路。

        先从结构体说起,我们知道结构体变量的首地址在一般情况下等于结构体变量第一个成员的首地址,当然有些编译器并不这么做,但是是少数派,我们暂且不管。所以在移植方面,这个框架做的并不那么完美,希望大家能献计献策。 基于地址相同的这个事实,我们可以给这个框架的设计加入一些“面向对象的思想”。以链表为例进行说明:

        1.我们先定义一个通用的结构:

        

      

    typedef struct _list_item
    {
        struct _list_item *prev;
        struct _list_item *next;
    }list_item;

        我们的思想就是,增删改查只针对这个通用的结构进行,那么我们的业务数据是如何被操作的呢,这就需要用到我们上面那个地址相等的事实,稍作修饰即可。


    typedef struct sutd
    {
        AS_LIST_ITEM;//关键无比的宏,逻辑上可以认为stud_t “继承”了这个list_item
        int id;
        char *name;
    }stud_t;

    AS_LIST_ITEM 是一个宏:

    #define AS_LIST_ITEM list_item __list_item

        这样当我们操作链表的时候只需要把我们的stud_t 当成一个指针传入增删改查函数即可,增删改查函数内部把指针当做 list_item类型来操作,同样也会返回给我们这个类型的指针,业务层收到这个指针后,只需要强制类型转换到stud_t即可。


    对于有些平台,如果第一个变量的首地址跟结构体变量的首地址不等,而是逆序摆放,那么调整宏的位置到最后即可.

        插入一张图便于大家理解,蓝色的就是我们的list_item,我们的确没有必要针对特定类型进行串链表


        黑色的方格就是我们的业务层的结构体,怎么样,明白了吧。array,map同理

    展开全文
  • 本地C语言编程手册和STL编程手册,方便开发
  • C++ STL中最基本以及最常用的类或容器无非就是以下几个:▶ string▶ vector▶ set▶ list▶ map下面就依次介绍它们,并给出一些最常见的最实用的使用方法,做到快速入门。☏ string首先看看我们C语言一般怎么使用...

    C++ STL中最基本以及最常用的类或容器无非就是以下几个:

    ▶ string

    ▶ vector

    ▶ set

    ▶ list

    ▶ map

    下面就依次介绍它们,并给出一些最常见的最实用的使用方法,做到快速入门。

    ☏ string

    首先看看我们C语言一般怎么使用字符串的

    179615008_1_20200105082934472

    C++ 标准库中的string表示可变长的字符串,它在头文件string里面。#include

    用string初始化字符串分两类:用“=”号就是拷贝初始化,否则就是直接初始化。

    179615008_2_20200105082934581

    179615008_3_20200105082934628

    179615008_4_20200105082934753

    179615008_5_20200105082934894

    179615008_6_2020010508293581

    对于想学习C/C++的小伙伴而言,学习的氛围和志同道合的伙伴很重要,笔者推荐一个C语言/C++编程爱好者的聚集地>>>私信我【编程学习】即可!۞ string的IO操作

    使用cin读入字符串时,遇到空白就停止读取。比如程序输入的是'Hello World'

    那么我们得到的字符串将是'Hello',前面的空白没了,后面的world也读不出来。

    如果我们想把整个hello world读进来怎么办?那就这样做cin>>s1>>s2;

    hello存在s1里,world存在s2里了。

    有时我们想把一个句子存下来,又不想像上面那样创建多个string来存储单词,怎么办?

    那就是用getline来获取一整行内容。stringstr;getline(cin, str);cout<< str <

    当把string对象和字符面值及字符串面值混在一条语句中使用时,必须确保+的两侧的运算对象至少有一个是string

    179615008_7_20200105082935128۞ 处理string中的字符

    访问字符串的每个字符

    179615008_8_20200105082935237

    在C语言中我都是用下标或者指针来访问数组元素,而在C++里,有个新奇的东西叫做迭代器iterator,我们可以使用它来访问容器元素。

    179615008_9_20200105082935269

    179615008_10_20200105082935316

    我们也可以是使用const_iterator使得访问元素时是能读不能写,这跟常量指针意思差不多。

    179615008_11_20200105082935425

    179615008_12_20200105082935566

    string还有一些很好用的函数,比如找子串

    179615008_13_20200105082935706☏ vector

    C++ STL中的verctor好比是C语言中的数组,但是vector又具有数组没有的一些高级功能。与数组相比,vector就是一个可以不用再初始化就必须制定大小的边长数组,当然了,它还有许多高级功能。

    要想用vector首先得包含头文件vector。#include

    怎么初始化?

    179615008_14_20200105082935737

    如果vector的元素类型是int,默认初始化为0;如果vector元素类型为string,则默认初始化为空字符串。

    179615008_15_20200105082935831

    如何向vector添加元素?

    请使用push_back加入元素,并且这个元素是被加在数组尾部的。

    179615008_16_20200105082935878

    vector其他的操作

    179615008_17_20200105082935956

    访问和操作vector中的每个元素

    179615008_18_2020010508293666

    注意:只能对已存在的元素进行赋值或者修改操作,如果是要加入新元素,务必使用push_back。push_back的作用有两个:告诉编译器为新元素开辟空间、将新元素存入新空间里。

    比如下面的代码是错误的,但是编译器不会报错,就像是数组越界。

    179615008_19_20200105082936144

    当然我们也可以选择使用迭代器来访问元素

    179615008_20_20200105082936237

    上面是正向迭代,如果我们想从后往前迭代该如何操作?

    使用反向迭代器

    179615008_21_20200105082936362

    vector最常用的增删操作

    179615008_22_20200105082936456

    179615008_23_20200105082936503

    179615008_24_20200105082936628

    注意:虽然vertor对象可以动态增长,但是也或有一点副作用:已知的一个限制就是不能再范围for循环中向vector对象添加元素。另外一个限制就是任何一种可能改变vector对象容量的操作,不如push_back,都会使该迭代器失效。

    总而言之就是:但凡使用了迭代器的循环体,都不要向迭代器所属的容器添加元素!

    ۞ C++中push_back和insert两个有什么区别?

    顾名思义push_back把元素插入容器末尾,insert把元素插入任何你指定的位置。

    不过push_back速度一般比insert快。如果能用push_back尽量先用push_back。☏ set

    set跟vector差不多,它跟vector的唯一区别就是,set里面的元素是有序的且唯一的,只要你往set里添加元素,它就会自动排序,而且,如果你添加的元素set里面本来就存在,那么这次添加操作就不执行。要想用set先加个头文件set。

    179615008_25_20200105082936769

    179615008_26_20200105082936972☏ list

    list就是链表,在C语言中我们想使用链表都是自己去实现的,实现起来倒不难,但是如果有现成的高效的链表可以使用的话,我们就不需要重复造轮子了。STL就提供了list容器给我们。

    list是一个双向链表,而单链表对应的容器则是foward_list。

    list即双向链表的优点是插入和删除元素都比较快捷,缺点是不能随机访问元素。

    初始化方式就大同小异了,跟vector基本一样。要想用list先加个头文件list。

    179615008_27_202001050829373

    179615008_28_2020010508293781

    值得注意的是,list容器不能调用algorithm下的sort函数进行排序,因为sort函数要求容器必须可以随机存储,而list做不到。所以,list自己做了一个自己用的排序函数,用法如下:

    179615008_29_20200105082937113☏ map

    map运用了哈希表地址映射的思想,也就是key-value的思想,来实现的。

    首先给出map最好用也最最常用的用法例子,就是用字符串作为key去查询操作对应的value。

    要使用map得先加个头文件map。

    179615008_30_20200105082937191

    179615008_31_20200105082937394

    如果想看看某个存不存在某个key,可以用count来判断

    179615008_32_20200105082937535

    用迭代器来访问元素

    179615008_33_20200105082937628

    “我是一名从事了10年开发在退休边缘垂死挣扎的高龄程序员,最近我花了一些时间整理了一个完整的学习C语言、C++的路线,项目源码和工具。对于想学习C/C++的小伙伴而言,学习的氛围和志同道合的伙伴很重要,笔者推荐一个C语言/C++编程爱好者的聚集地>>>私信我【编程学习】即可!

    欢迎初学和进阶中的小伙伴。希望你也能凭自己的努力,成为下一个优秀的程序员。工作需要、感兴趣、为了入行、转行需要学习C/C++的伙伴可以一起学习!”

    关注我,带你遨游代码世界!

    展开全文
  • STL源码

    2018-08-03 17:38:08
    STL源码 STL.txt
  • C语言STL

    2018-12-27 14:55:16
    C语言版本的STL(libcstl)源代码,支持跨平台的编译和使用。
  • C语言STL

    千次阅读 2016-02-07 02:52:11
    一直在抱怨,标准C中为什么没有类似于STL的标准容器,让全世界的程序员在数以万次的重复实现它们。不过,还算走运,有了glib,恶梦在此终结了。glib提供了动态数组、单/双向链表、哈希表、多叉树、平衡二叉树、字符...

    今天推荐一个函数库glib 注意不是glibc 

    https://developer.gnome.org/glib/

    一直在抱怨,标准C中为什么没有类似于STL的标准容器,让全世界的程序员在数以万次的重复实现它们。不过,还算走运,有了glib,恶梦在此终结了。glib提供了动态数组、单/双向链表、哈希表、多叉树、平衡二叉树、字符串等常用容器,完全是面向对象设计的,实现得非常精致。


    你开发过跨硬件平台的软件吗?是不是常常为硬件平台的差异而苦恼呢?字节顺序是常见的问题之一,大端格式,小端格式,还是PDP格式的?这样差异造成的BUG会浪费不少时间,同时让代码晦涩难读。glib提供了一套完整的宏,利用这些宏编写程序,问题大大简化了。


    不用白不用,别客气了。

    展开全文
  • C语言中,我们打ACM可以用<vector>、<stack>等模板来快速实现一些经典的数据结构,可我在很多地方都没找到Python中类似于C里面的STL模板这么好用的东西.于是我在Python的标准库里面总结了些模块来直接实现...
  • stl C语言文件读写

    2020-09-02 14:28:11
    1、fopen_s、_wfopen_s 描述:        打开文件。 函数定义: errno_t fopen_s(FILE** stream, char const* fileName, char const* mode);...errno_t _wfopen_s(FILE** stream, wchar_t const* ...
  • c语言.stl中文版

    2008-06-25 09:03:07
    c语言.stl中文版,这是一本讲解关于STL的书籍。STL是标准模板库的意思,它提供了很多数据结构的实现---比如列表 堆栈等。如果你说你已经熟练掌握了C++,但你却没有学习过STL,那就好比数学家不知道勾股定理一样,是...
  • 介绍STL(standard template library)标准模板库,是一种高效的C++程序库。STL分为三类:container(容器),iterator(迭代器)和algorithm(算法)。容器(container)容器是用来管理某一类对象的集合,包括序列式容器和关联式...
  • 一个通用的C语言编写的类似STL功能的集合库,实现比较简单,通用性比较强
  • C语言头文件大全.pptx

    2020-10-10 02:06:59
    标准 C 语言头文件;标准 C++ 语言头文件54 个其中 16 个用于构建 STL,3 个为附加非必须 ;3;4;5;6;7
  • 集合C标准库、glibc库,多个版本的stl库的实现源代码,这里留个存档,方面后面研究学习....................
  • stl模板库的c语言实现

    2017-05-17 14:38:41
    libcstl-2.3.0,用c语言实现的c++ 模板库,包含map、tree、list、vector等的实现。
  • C语言实现仿C++STL泛型链表,实现了C++STL链表的基本功能,但代码并未做完善的测试,性能也不能保障,主要用于初学者学习
  • STL文件读取显示与操作
  • c语言 stl 标准模板库 网页 c语言 stl 标准模板库 网页
  • 该资料包括了老师上课讲的C++STL提高篇的讲义内容。总共有十个部分,是老师上课讲义的原文。
  • set<int,greater<int> > a;//降序 set<int> a;//默认为升序,等同set<int,less<int> > a;

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,478
精华内容 12,591
关键字:

c语言stl大全