❶ 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