❶ linux下的vi怎麼才能調用stl
#1 sort 泛型演算法用錯了
sort(begin, end, comp)
begin , end 均為iterator一般,但用指針也可以。(我理解的,iterator我感覺和指針應該屬於一家人,呵呵,親緣關系)
end指向需要排序的最後一個元素的下一個位置
所以
你要把
cin>>a[i];
sort(a,cmp);
改為
cin>>a[i];
sort(a,a+i+1,cmp); // end指向需要排序的最後一個元素的下一個位置
就對了。
你試一下 :)
#2 即使這樣都對了,總感覺這個程序寫的不是很好。
每次插入你都要排序,明顯效率低下么。
應該是在插完最後一個元素排一次就夠了
推薦 把 c++ primer 好好多看一下。 :)
我自己也水平比較爛,剛開始看c++,以前一直是C語言。
❷ 有沒有關於C++開源軟體解析的書籍
「開源軟體解析」?你的意思是源碼剖析or源碼閱讀方法?
我所知道的(眼界有限,見笑了)純粹C++的有:
《STL源碼剖析》(作者侯捷,深入淺出剖析地STL源碼的組織結構及其細節,值得推薦)
《C++網路編程 第一卷》(書的作者就是ACE的作者,主要向我們展示ACE的設計理念,如果你對網路編程不感興趣,可以不用看)
關於源碼閱讀方法,我所知的有:
《代碼閱讀方法與實際》(書中列舉了大量NetBSD的源碼)
Linux源碼方面的書貌似有不少,Apache,Nginx的源碼書也有不少;這些好像都是純C寫的。
不過想要讀懂這些和特定領域有關的開源代碼,光有語言基礎是不夠的,還有足夠的「領域知識」。讀任何操作系統源碼前你起碼應該知道其上的API如何使用,讀web伺服器源碼前你起碼要知道TCP,HTTP協議的區別與聯系,讀物理引擎的源碼前你起碼要有高中物理的知識儲備和線性代數的基礎
❸ 初學電腦編程最好用哪本書
如果想學網路協議
推薦:《計算機通信網》《TCP/IP協議族》《區域網與城域網》 《TCP/IP詳解 卷一 協議》《接入網技術》如果想了解系統底層實現
推薦:《linux內核設計與實現》 《深入理解linux內核》 《linux設備驅動程序》《深入分析linux內核源碼》如果想學習演算法
推薦:《演算法導論》 《計算機程序設計藝術 卷一 基本演算法》 《計算機程序設計藝術 卷二 半數值演算法》 《計算機程序設計藝術 卷三 排序和查找》如果想學大型網路伺服器編程
推薦:《UNIX網路編程 卷1》《UNIX環境高級編程》《UNIX網路編程 卷二 :進程間通信》 如果對C一點都不了解:
推薦:《C與C指針》《C編程一站式學習》 《你必須知道的495個c語言知識》 《c高質量編程》 《C專家編程》 《C陷阱與缺陷》如果對C++一點都不了解
推薦:《C++ primer》《C標准函數庫》 《STL源碼剖析》 《Effective C++》
❹ linux 下如何查看stl的源代碼
下面首先給出這幾篇文章,都是介紹STL入門的極佳導學文章-- C++ STL輕松導學STL簡介A modest STL tutorial 看了這篇文章之後,我想你一定對STL有了一個概括性質的了解,當然,如果你感覺自己了解的仍然不夠充分,你可以去這里--STL 中文站最優秀的STL使用學習網站 C++ Standard Template Library Overview 獲取更為詳細的信息;其實網上有關STL的東西太多了,魚龍混雜,但絕不乏精品,所以,如果你感覺看某一篇有關STL的文章實在是看不下去了,就應該考慮是不是這篇文章質量有問題,再去網上搜取合適的吧。 我想通覽了以上有關STL的信息之後,我們可以得出這樣一個結論,那就是在linux下,如果要使用STL庫,可選的就是這兩個:Boost和SGI; 下面我們分別來作一下比較: 這是C++ Boost 庫的文檔索引 這是C++ SGI 庫的文檔索引 經過比較,我們可以得出這樣一個結論,Boost庫的內容更為豐富一些;所以,如果你打算體驗一下Linux下的基於STL的應用開發,可以准備從Boost的學習開始,而且Boost的網上文檔也是非常豐富的,參與Boost的開發人員甚至達到了2000多人! 下面在Linux下編寫一個基於STL的程序,測試一下;對了,現在我們也知道了Linux下默認支持的STL是SGI庫,此庫在Linux下性能非常不錯! 這里先給出程序源代碼:
❺ 想從事linux下c++開發,需要學哪些知識幫忙推薦每個學習階段的一些書籍,越詳細越好。
《21天學會C++》
或者
《C++ Primer 》
《 C++編程規范》作者 : Herb Sutter/Andrei Alexandrescu
《Exceptional C++ Style中文版》 作者 : Herb Sutter
《C++面向對象程序設計》薩維奇 (Walter Savitch) / 周靖 / 清華大學出版社
《C++ : The Complete Reference 》Herbert Schildt / Osborne/McGraw-Hill
《C++沉思錄》(美)凱尼格,(美)莫歐著,黃曉春
《Effective C++:改善程序與設計的55個具體做法》(美)梅耶 著,侯捷 譯
《More Effective C++:35個改善編程與設計的有效方法》(美)梅耶著,侯捷
《零起點學通C++》范磊 編著
一、Linux操作系統
二、Linux C++開發環境搭建、開發工具的使用
三、C++語言
四、C++ Boost模板庫
五、ACE框架
六、資料庫開發
七、軟體工程
unix 高級編程、系統編程燈書籍
❻ linux tinyxml2怎麼編譯
1.首先,要到官網上去把tinyxml庫下載下來,網址為:點擊打開鏈接:http://sourceforge.net/projects/tinyxml/
2.把下載的tinyxml庫解壓縮,我這里是解壓縮到/opt 目錄下
3.進入到解壓縮目錄下,我們會發現Tinyxml在Windows 下是使用微軟的VS 來生成的庫,因為其中有tinyxml.sln,tinyxml_lib.vcxproj,tinyxmlSTL.vcxproj等文件,當然,Tinyxml是開源的,所以它也有一個Makefile,用來生成Linux下的Tinyxml庫。整個Tinyxml源碼項目其實是由2個頭文件和一個4個C++源文件(.cpp)組成:tinystr.h,tinyxml.h,tinystr.cpp,tinyxml.cpp,tinyxmlerror.cpp,tinyxmlparser.cpp。其中還有一個xmltest.cpp文件,只是一個測試代碼,有興趣的話,大家可以打開研究它。好了,現在介紹怎麼修改它的Makefile:
(1)使用vim或者其他的編輯器打開Makefile文件
(2)將其中的注釋為Targets of the build的下一行OUTPUT := xmltest一行修改為:OUTPUT := libtinyxml.a
(3)將其中的注釋為Source files 的下一行SRCS:=tinyxml.cpp tinyxml-parser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp中的xmltest.cpp刪除,因為它只是一個測試源文件,不需要編譯。
(4)將其中的Output的下一行的${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}修改為:${AR} $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}。大致改成這樣
(6)在終端下進入Makefile所在目錄,執行make命令編譯,即可在Makefile所在目錄下生成libtinyxml.a文件。
4.接下來就可以使用這個靜態庫了:$ g++ -o xmltest xmltest.cpp libtinyxml.a 注意:將使用的靜態庫放在源文件後面即可,如果靜態庫文件不在當前目錄,應該使用它的絕對路徑或者用g++的參數-L來指定路徑,因為編譯器默認在當前目錄下先查找指定的庫文件。
修改後的Makefile (v 1.0.1) 記錄如下:
[plain] view plain print?
#****************************************************************************
#
#MakefileforTinyXmltest.
#LeeThomason
#www.grinninglizard.com
#
#ThisisaGNUmake(gmake)makefile
#****************************************************************************
#,orNOotherwise
DEBUG:=NO
#,orNOotherwise
PROFILE:=NO
#TINYXML_USE_.NO,thenSTL
#willnotbeused.YESwillincludetheSTLfiles.
TINYXML_USE_STL:=NO
#****************************************************************************
CC:=gcc
CXX:=g++
LD:=g++
AR:=arrc
RANLIB:=ranlib
DEBUG_CFLAGS:=-Wall-Wno-format-g-DDEBUG
RELEASE_CFLAGS:=-Wall-Wno-unknown-pragmas-Wno-format-O3
LIBS:=
DEBUG_CXXFLAGS:=${DEBUG_CFLAGS}
RELEASE_CXXFLAGS:=${RELEASE_CFLAGS}
DEBUG_LDFLAGS:=-g
RELEASE_LDFLAGS:=
ifeq(YES,${DEBUG})
CFLAGS:=${DEBUG_CFLAGS}
CXXFLAGS:=${DEBUG_CXXFLAGS}
LDFLAGS:=${DEBUG_LDFLAGS}
else
CFLAGS:=${RELEASE_CFLAGS}
CXXFLAGS:=${RELEASE_CXXFLAGS}
LDFLAGS:=${RELEASE_LDFLAGS}
endif
ifeq(YES,${PROFILE})
CFLAGS:=${CFLAGS}-pg-O3
CXXFLAGS:=${CXXFLAGS}-pg-O3
LDFLAGS:=${LDFLAGS}-pg
endif
#****************************************************************************
#Preprocessordirectives
#****************************************************************************
ifeq(YES,${TINYXML_USE_STL})
DEFS:=-DTIXML_USE_STL
else
DEFS:=
endif
#****************************************************************************
#Includepaths
#****************************************************************************
#INCS:=-I/usr/include/g++-2-I/usr/local/include
INCS:=
#****************************************************************************
#
#****************************************************************************
CFLAGS:=${CFLAGS}${DEFS}
CXXFLAGS:=${CXXFLAGS}${DEFS}
#****************************************************************************
#Targetsofthebuild
#****************************************************************************
OUTPUT:=libtinyxml.a
all:${OUTPUT}
#****************************************************************************
#Sourcefiles
#****************************************************************************
SRCS:=tinyxml.cpptinyxmlparser.cpptinyxmlerror.cpptinystr.cpp
#Addonthesourcesforlibraries
SRCS:=${SRCS}
OBJS:=$(addsuffix.o,$(basename${SRCS}))
#****************************************************************************
#Output
#****************************************************************************
${OUTPUT}:${OBJS}
${AR}$@${LDFLAGS}${OBJS}${LIBS}${EXTRA_LIBS}
#${LD}-o$@${LDFLAGS}${OBJS}${LIBS}${EXTRA_LIBS}
#****************************************************************************
#commonrules
#****************************************************************************
#
%.o:%.cpp
${CXX}-c${CXXFLAGS}${INCS}$<-o$@
%.o:%.c
${CC}-c${CFLAGS}${INCS}$<-o$@
dist:
bashmakedistlinux
clean:
-rm-fcore${OBJS}${OUTPUT}
depend:
#makedepend${INCS}${SRCS}
tinyxml.o:tinyxml.htinystr.h
tinyxmlparser.o:tinyxml.htinystr.h
tinyxmlerror.o:tinyxml.htinystr.h
❼ linux 下如何查看stl的源代碼
STL是Standard Template Library的簡稱,也即標准模板庫,是一個具有工業強度的,高效的C++程序庫。有關使用庫的好處自不必多說,這里大致的講述一下STL的相關知識和如何在Linux下使用STL;
下面首先給出這幾篇文章,都是介紹STL入門的極佳導學文章--
C++ STL輕松導學
STL簡介
A modest STL tutorial
看了這篇文章之後,我想你一定對STL有了一個概括性質的了解,當然,如果你感覺自己了解的仍然不夠充分,你可以去這里--
STL 中文站
最優秀的STL使用學習網站
C++ Standard Template Library Overview
獲取更為詳細的信息;其實網上有關STL的東西太多了,魚龍混雜,但絕不乏精品,所以,如果你感覺看某一篇有關STL的文章實在是看不下去了,就應該考慮是不是這篇文章質量有問題,再去網上搜取合適的吧。
我想通覽了以上有關STL的信息之後,我們可以得出這樣一個結論,那就是在linux下,如果要使用STL庫,可選的就是這兩個:Boost和SGI;
下面我們分別來作一下比較:
這是C++ Boost 庫的文檔索引
這是C++ SGI 庫的文檔索引
經過比較,我們可以得出這樣一個結論,Boost庫的內容更為豐富一些;所以,如果你打算體驗一下Linux下的基於STL的應用開發,可以准備從Boost的學習開始,而且Boost的網上文檔也是非常豐富的,參與Boost的開發人員甚至達到了2000多人!
下面在Linux下編寫一個基於STL的程序,測試一下;對了,現在我們也知道了Linux下默認支持的STL是SGI庫,此庫在Linux下性能非常不錯!
這里先給出程序源代碼:
#include <iostream>#include <vector>using namespace std;int main(int argc, char *argv[]){ vector<int> int_vector; vector<double> double_vector; int_vector.push_back(99); int_vector.push_back(9999); double_vector.push_back(99.99); double_vector.push_back(9999.9999); int size; size = int_vector.size(); for (int i = 0; i < size; i ++){ cout << int_vector[i] << endl; } size = double_vector.size(); for (int j = 0; j < size; j ++){ cout << double_vector[j] << endl; }}
注意其中的這一句「using namespace std;」,如果沒有這一句,你會遇到很多莫名其妙的問題,導致你不知所措,沒辦法排除錯誤,而實際上解決問題的關鍵就是這么一句話!
❽ 求Linux上可用的stl::map的線程安全的庫(源碼,只需要這一部分).速度速度.
wdawdawdaawd