導航:首頁 > 源碼編譯 > 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源碼怎麼用相關的資料

熱點內容
幻影伺服器怎麼樣 瀏覽:25
具體哪些廣東公司招程序員 瀏覽:867
嵌入式編譯器教程 瀏覽:302
ssl數據加密傳輸 瀏覽:86
51單片機定時器方式2 瀏覽:330
命令行查看開機時間 瀏覽:812
python微博復雜網路分析 瀏覽:550
rf3148編程器 瀏覽:505
浙江標准網路伺服器機櫃雲主機 瀏覽:587
設置網路的伺服器地址 瀏覽:600
java圖形界面設計 瀏覽:751
純前端項目怎麼部署到伺服器 瀏覽:538
瓜子臉程序員 瀏覽:505
如何保證伺服器優質 瀏覽:94
小微信aPP怎麼一下找不到了 瀏覽:299
演算法纂要學術價值 瀏覽:975
程序員你好是什麼意思 瀏覽:802
倩女幽魂老伺服器如何玩 瀏覽:563
電子鍾單片機課程設計實驗報告 瀏覽:1001
看加密頻道 瀏覽:382