导航:首页 > 源码编译 > cstl源码怎么用

cstl源码怎么用

发布时间:2023-04-24 21:14:50

Ⅰ C++应该怎么学

大一学习的c++,工作之后也一直用的c++。

1. 涵盖c++入门到精通的图书列表

《The C programming language》必读
《C++ Primer》,号称是一本可以让你从C或java程序员转为一个真正的C++程序员的入门参考书,必读。
《The C++ programming language》,C++之父,人称B教主着作,在看过C++ primer后,应该可以跳章选读。
《Think in c++》,网上说此书的中文版翻译质量奇差,推荐看影印版,选读。
《Effective c++》,类似 Effective java,讲的是最佳实践,程序员必读。


《More effective c++》,上书的补充。
《The C++ standard library》,会写C,不会用标准库怎么行。这就跟java程序员不衫拦会用java.util包一样,必读。
《Effective STL》,STL库的最佳实践。Effective C++作者又一力作,必读。
《The annotated STL source》,STL源码分析,这本书应该算是深入/精通类了,选读。
《Generic programming and STL》,号称C++编程里,就是跟模板,泛型打交道,那么精通泛型是势在必行。

《C++ Template》,C++模板编程,代码复用的经验之道,必读。

《Exceptional C++》,跟Effective C++类似,属于最佳实践和难题解析,书中列出了许多应用场景和实例代码供读者揣摩,选读。

《More Exceptional C++》,上书的补充。

《Exceptional C++ Style》,上上书的补充

《Inside The C++ Object Model》,有了上面这些书做铺垫返塌迟,那么终于可以读此神书了。它会带你游览C++对象模型的底层实现机制。读完此书,任何C++代码看起来如同行云流水,必读。

2. 优秀的C/C++开源项目(阅读代码)

OS:linux kernel LVS、Linux应用程序

DB:Mysql、PostgreSQL

Complier:VM、GCC

Framework:OpenSip、SipProxy、

Net:ACE(Java Mina、Netty)、TCP/IP、HTTP协议栈

Cache:Memcached、Redis、

Library:STL(java util package)、Boost、Qt(UI)、

balance:Apache、Nginx

GSL

地址:https://github.com/microsoft/GSL

Boost文档

地址:https://www.boost.org/doc/libs/

wxWidgets官网

地址:http://wxwidgets.org/

gtkmm

地址:https://www.gtkmm.org/en/

CopperSpice

地址:https://www.copperspice.com/

Qt

地址:https://www.qt.io/Eigen

地址:http://eigen.tuxfamily.org/index.php?title=Main_Page#Documentation

Plot utils

地址:https://www.gnu.org/software/plotutils/

Asio

地址:https://think-async.com/Asio/

POCO

地址:https://pocoproject.org/

abseil

地址:https://abseil.io/

C++开源库汇总列表

地址:https://en.cppreference.com/w/cpp/links/libs

除了这些开源项目,也可以找一些免费的公开课,那这里也推荐漏李一个ACM金牌大佬讲授的免费C++课程,可以去体验一下:

学好C++才是入职大厂的敲门砖! 当年要是有这课,我的C++也不至于这样

已失效

3.C++语法讲解

Ⅱ 《STL源码分析》中如何priority_queue使用greater函数对象

首先查看手册,priority_queue的定义如下:

template<classT, classContainer=std::vector<T>, classCompare=std::less<typenameContainer::value_type>>classpriority_queue;

然后继续看模板的三个参数的说明

—————————以下直接摘抄的—————

Template parameters

T - The type of the stored elements.The behavior is undefined ifTis not the same type asContainer::value_type.(since C++17)

Container - The type of the underlying container to use to store the elements. The container must satisfy the requirements ofSequenceContainer, and its iterators must satisfy the requirements ofLegacyRandomAccessIterator. Additionally, it must provide the following functions with the usual semantics:

Compare - AComparetype providing a strict weak ordering.

—————————以上直接摘抄的—————

故可知,使用priority_queue需要给三个类来实现模板,其中第三个类就是那个比较函数,你问的,为什么要priority_queue<int, vector<int>, greater<int> > q1;已经回答完毕。

另外,可以参考std::less的定义,更深入学习第三个类的含义。已附在引用部分,自行查阅。


std::priority_queuestd::less

PS:第一个那家伙回答的什么东西!我本来是不想回答的。。。看见那家伙胡诌一气,气不过。

Ⅲ C 语言的库函数和C++ STL要学到什么程度呀 谢过先

c库如果只是初级应用,到看到函数名就知道怎么用
如果要写底层的,那么除了知道函数,还要知道本身的底层实现和优搜亏缺点

stl跟c库是不同的,那是c++的东西,这玩意要知道所有的容器和泛型算法,非一朝一夕能够掌握的,建议看一下stl源码解析和c++编程新思维。如果要进阶,就丛漏哪要看一下boost的stl库是怎么写的,这些都非渗码常耗时的。

另外msdn里面没有stl的东西

Ⅳ #include <cstdio>有什么用

cstdio就是将stdio.h的内容用C++的头文件形式表现出来。

stdio.h是老式的C,C++头文件,cstdio是标准 C++(STL),且cstdio中的函数都是定义在一个名字空源困间std里面的。

如果要调用这个名字空间的函数,必须得加std::或者在文件中声明use namespace std

(4)cstl源码怎么用扩展阅读:

stdio 就是指 “standard input & output"(标准输入输出)

所以,源代码中如用到标准输入输出函数时,就要包含这个头文件!

例如c语言中判氏的printf("%d",i);雹冲念scanf("%d",&i);等函数。

引用方法

#include<stdio.h>

Ⅳ 如何在Android平台下编译带STL的C++程序

1、下载最新的Android SDK,下载Android NDK R9C版本。

2、如是在windows平台下需要在PATH中设置环境变量,以便于直接调用NDK来编译C++程序。

将如下两个路径加入到PATH中:<ANDROID_NDK>;<ANDROID_SDK>\platform-tools

其中<NDK>为你的计算机上Android NDK的安装路径,<SDK>为Android SDK的安装路径

如果在你的SDK下没有platform-tools目录,则在Eclipse中按照如下截图进行操作:

3、为要编译的C++程序建一个文件夹,如myproject。在myproject下再建一个jni文件夹,将源代码放在这个文件夹下,myproject/jni。

mkdir myproject

mkdir myproject/jni

4、在jni文件夹下建两个分别名为:android.mk和
application.mk文件。android.mk类以于C++程序的makefile,application.mk则指明当前程序依赖的库。

android.mk的示例为:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := my_first_app #指明C++程序编译出的可执行程序的名称

LOCAL_SRC_FILES:= my_first_app0.cpp \ #指明要编译的源文件,可以有很多个

my_first_app1.cpp\



include$(BUILD_EXECUTABLE)#表明编译的是可执行程序

/**************************************************************************/

application.mk的示例为:(在application.mk中指明STL库)

APP_STL:= gnustl_static

这里选STL库时有四个选项:

system - 使用默认最小的C++运行库,这样生成的应用体积小,内存占用小,但部分功能将无法支持
stlport_static - 使用STLport作为静态库,这项是Android开发网极力推荐的
stlport_shared - STLport 作为动态库,这个可能产生兼容性和部分低版本的Android固件,目前不推荐使用。
gnustl_static - 使用 GNU libstdc++ 作为静态库

默认情况下STLPORT是不支持C++异常处理和RTTI,所以不要出现 -fexceptions 或 -frtti ,如果真的需要可以使用gnustl_static来支持标准C++的特性,但生成的文件体积会偏大,运行效率会低一些。

支持C++异常处理,在Application.mk中加入 LOCAL_CPPFLAGS +=
-fexceptions这句,同理支持RTTI,则加入LOCAL_CPPFLAGS +=
-frtti,这里再次提醒大家,第二条说的使用gnustl静态库,而不是stlport。

强制重新编译 STLPort ,在Application.mk中加入 STLPORT_FORCE_REBUILD := true 可以强制重新编译STLPort源码,由于一些原因可能自己需要修改下STLPort库,一般普通的开发者无需使用此项

5、打开控制台(cmd),在myproject目录下用android的NDK build工具编译C++程序:

cd myproject

$NDK/ndk-build

如果程序没错的话,会编译出android的可执行程序,位置在myproject/libs/armeabi/my_first_app

8、将编译出来的my_first_app放到手机或是模拟器上运行。在windows的cmd上运行adb.exe。

用adb.exe将my_first_app程序push到手机或模拟器的/data/local目录上:

adb.exepush myproject\libs\armeabi\my_first_app /data/local。

9、通过adb,在手机上运行my_frist_app:

在cmd上运行:

adb.exe shell

由此进入到手机的linux终端上,接下来再更改my_first_app的权限使其可以运行:

cd /data/local

chmod 777 my_first_app

./my_first_app//如果没错的话,这一步即可运行my_first_app

至此在android上编译含STL的C++程序的过程结束。

Ⅵ 谁来解释下c++中的STL用来做什么的,推荐点学习资料

关于STL网上资料还是很多的,以下是对初学者较为好理解的:

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的 应用框架,高度体现了软件的可复用性。这种现象有些类似于Microsoft Visual C++中的MFC(Microsoft Foundation Class Library),或者是Borland C++ Builder中的VCL(Visual Component Library)

从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming),引入了诸多新的名词,比如像需求(requirements),概念(concept),模型(model),容器 (container),算法(algorithmn),迭代子(iterator)等。与OOP(object-oriented programming)中的多态(polymorphism)一样,泛型也是一种软件的复用技术。

从实现层次看,整个STL是以一种类型参数化(type parameterized)的方式实现的,这种方式基于一个在早先C++标准中没有出现的语言特性--模板(template)。如果查阅任何一个版本 的STL源代码,你就会发现,模板作为构成整个STL的基石是一件千真万确的事情。除此之外,还有许多C++的新特性为STL的实现提供了方便。

没有C++语言就没有STL,这么说毫不为过。一般而言,STL作为一个泛 型化的数据结构和算法库,并不牵涉具体语言(当然,在C++里,它被称为STL)。也就是说,如果条件允许,用其他语言也可以实现之。这里所说的条件,主 要是指类似于"模板"这样的语法机制。如果你没有略过前一节内容的话,应该可以看到,Alexander Stepanov在选择C++语言作为实现工具之前,早以采用过多种程序设计语言。但是,为什么最终还是C++幸运的承担了这个历史性任务呢?原因不仅在 于前述那个条件,还在于C++在某些方面所表现出来的优越特性,比如:高效而灵活的指针。但是如果把C++作为一种OOP(Object- Oriented Programming,面向对象程序设计)语言来看待的话(事实上我们一般都是这么认为的,不是吗?),其功能强大的继承机制却没有给STL的实现帮上 多大的忙。在STL的源代码里,并没有太多太复杂的继承关系。继承的思想,甚而面向对象的思想,还不足以实现类似STL这样的泛型库。C++只有在引入了 "模板"之后,才直接导致了STL的诞生。这也正是为什么,用其他比C++更纯的面向对象语言无法实现泛型思想的一个重要原因。当然,事情总是在变化之 中,像Java在这方面,就是一个很好的例子,jdk1.4中已经加入了泛型的特性。

此外,STL对于C++的发展,尤其是模板机制,也起到了促进作用。比如: 模板函数的偏特化(template function partial specialization),它被用于在特定应用场合,为一般模板函数提供一系列特殊化版本。这一特性是继STL被ANSI/ISO C++标准委员会通过之后,在Bjarne和Stepanov共同商讨之下并由Bjarne向委员会提出建议的,最终该项建议被通过。这使得STL中的一 些算法在处理特殊情形时可以选择非一般化的方式,从而保证了执行的效率。STL是最新的C++标准函数库中的一个子集,这个庞大的子集占据了整个库 的大约80%的分量。而作为在实现STL过程中扮演关键角色的模板则充斥了几乎整个C++标准函数库.

在STL还没有降生的"黑暗时代",C++程序员要完成前面所提到的那些功能,需要做很多事情(不过这比起C程序来,似乎好一点),程序大致是如下这个样子的:

#include <stdlib.h>
#include <iostream.h>

int compare(const void *arg1, const void *arg2);

void main(void)
{
const int max_size = 10; // 数组允许元素的最大个数
int num[max_size]; // 整型数组

// 从标准输入设备读入整数,同时累计输入个数,
// 直到输入的是非整型数据为止
int n;
for (n = 0; cin >> num[n]; n ++);

// C标准库中的快速排序(quick-sort)函数
qsort(num, n, sizeof(int), compare);

// 将排序结果输出到标准输出设备
for (int i = 0; i < n; i ++)
cout << num[i] << "\n";
}

// 比较两个数的大小,
// 如果*(int *)arg1比*(int *)arg2小,则返回-1
// 如果*(int *)arg1比*(int *)arg2大,则返回1
// 如果*(int *)arg1等于*(int *)arg2,则返回0
int compare(const void *arg1, const void *arg2)
{
return (*(int *)arg1 < *(int *)arg2) ? -1 :
(*(int *)arg1 > *(int *)arg2) ? 1 : 0;
}

试着使用一下STL,看看效果如何。
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

void main(void)
{
vector<int> num; // STL中的vector容器
int element;

// 从标准输入设备读入整数,
// 直到输入的是非整型数据为止
while (cin >> element)
num.push_back(element);

// STL中的排序算法
sort(num.begin(), num.end());

// 将排序结果输出到标准输出设备
for (int i = 0; i < num.size(); i ++)
cout << num[i] << "\n";
}

这个程序的主要部分改用了STL的部件,看起来要比第一个程序简洁一 点,你已经找不到那个讨厌的compare函数了。这个程序是足够健壮的。

下面我们来看看这个绝版的C++程序。
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

void main(void)
{
typedef vector<int> int_vector;
typedef istream_iterator<int> istream_itr;
typedef ostream_iterator<int> ostream_itr;
typedef back_insert_iterator< int_vector > back_ins_itr;

// STL中的vector容器
int_vector num;

// 从标准输入设备读入整数,
// 直到输入的是非整型数据为止
(istream_itr(cin), istream_itr(), back_ins_itr(num));

// STL中的排序算法
sort(num.begin(), num.end());

// 将排序结果输出到标准输出设备
(num.begin(), num.end(), ostream_itr(cout, "\n"));
}

在这个程序里几乎每行代码都是和STL有关的(除了main和那对花 括号,当然还有注释),并且它包含了STL中几乎所有的各大部件(容器container,迭代器iterator, 算法algorithm, 适配器adaptor)

推荐资料 <<C++ Templates 中文版>>
《泛型编程与-STL中文版》
《C++ STL 中文版》
《Effective.STL中文版》

Ⅶ VC++中STL的容器都有哪些,怎么用。

1、顺序容器:vector,list,deque语法都一样,即:C<T>
c(n);系统会根据T类型的不同自动的对容器中的n个项进行初始化;
2、关联容器:map,set,multimap,multiset不支持上面的创建方
法。关联容器不能通过容器大小来定义,即是无法在定义关联容器时指明其大小。因为这样在自动初始化时,无扰塌物法知道键所对应的值是什么,比
如:map<string,int>
m;总不能初始化为空字衫差符串""键对应值0吧?就算第一个可以,但第二个呢?map中的键不能重复,那咋初始化第二个。
2、另外:缓液stack不是容
器,只是顺序容器适配器。类似的还有:queue,priority_queue

Ⅷ 怎么查看C++库函数的源码

如果你想看stl里面的源码可以去SGI 下载源代码,Download STL source code
去这个网站下载源码,sgi版本的stl代码一般来说中含可读性比较好,我正在看。
sort函数的代码在stl_algo.h文件里。侯捷有本书叫做《stl源码剖析》
如果是vs2008或者2010可以在Microsoft Visual Studio 10.0\VC\crt\src查看
另信悄外还有本书叫做《c标准库》但是现在好像绝版了。
也可以去这个找:在glibc库里,可去其官方网站下载(最新是2。7的),然卖坦笑后查找一下你要的函数。

Ⅸ C++ STL for_each 的用法

for_each第三个参数传入的是函数名称,通过模板生成代码后的函数指针,for_each需要调用,可以看看STL的for_each函橡液陵数的源码。
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;

void print(int a)
{
cout << a <<"\t";
}

class myInt
{
public:
void operator()(int x)
{
cout << x << "\t";
}
};

template<int thevalue>
void add(int &ele)
{
ele += thevalue;
}

class AddValue
{
private :
int thevalue;
public:
AddValue(int va) : thevalue(va)
{
}

void operator()(int & element)
{
element += thevalue;
}

};

int main()
{
/*
vector<string> ve;

(istream_iterator<string>(cin),
istream_iterator<string>(),
back_inserter(ve));

sort(ve.begin(),ve.end());

(ve.begin(),ve.end(),
ostream_iterator<string>(cout,"\t"));
*/
vector<int> ve;
for(int i = 0; i< 9; i++)
{
ve.push_back(i);
}

for_each(ve.begin(),ve.end(),print);
cout <<梁戚 endl;

for_each(ve.begin(),ve.end(),myInt());
cout << endl;

cout << "埋李after add --------" << endl;
for_each(ve.begin(),ve.end(),add<10>);

for_each(ve.begin(),ve.end(),print);
cout << endl;
for_each(ve.begin(),ve.end(),AddValue(10));
for_each(ve.begin(),ve.end(),print);
cout << endl;
for_each(ve.begin(),ve.end(),AddValue(*ve.begin()));
for_each(ve.begin(),ve.end(),print);
cout << endl;
}

阅读全文

与cstl源码怎么用相关的资料

热点内容
算法纂要学术价值 浏览:973
程序员你好是什么意思 浏览:799
倩女幽魂老服务器如何玩 浏览:559
电子钟单片机课程设计实验报告 浏览:997
看加密频道 浏览:379
程序员算不算流水线工人 浏览:632
三星电视我的app怎么卸载 浏览:44
简述vi编译器的基本操作 浏览:507
让程序员选小号 浏览:91
加强数字货币国际信息编译能力 浏览:584
购买的app会员怎么退安卓手机 浏览:891
程序员的种类及名称 浏览:293
美国程序员薪资 浏览:13
黑石通汇证券服务器什么时候到期 浏览:393
东方财富app里我的关注怎么看 浏览:749
bm3d单反级降噪算法 浏览:457
华为安卓机激活时间怎么查询 浏览:850
如何用优盘重装服务器系统 浏览:317
日本结婚三代算法 浏览:920
皓强工具解压步骤 浏览:691