C++ 标准库 技术教程文章

C++学习笔记之STL标准库(三)vector容器【图】

模板类vector是一个封装了动态大小数组的顺序容器,它所控制的序列是以连续数组的方式存储的。跟任意其它类型容器一样,它能够存放各种类型的对象。包含头文件#include <vector> 声明命名空间using namespace std;特性:  1)顺序序列:容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。  2)动态数组:支持对序列中的任意元素进行快速直接访问。操供了在序列末尾相对快速地添加/删除元素的操...

c++标准库的所有类型

标准库的组成: 前言就到此为止。从最宏观的层面上看,C++标准库由十个部分组成:语言支持、诊断、通用工具、字符串、本地化、容器、迭代器、通用算法、数值算法和I/O。头文件组成: C++ 标准库一共包含 33 个C++ 头文件:<algorithm>, <bitset>, <complex>, <deque>, <exception>, <fstream>, <functional>, <iomanip>, <ios>, <iosfwd>, <iostream>, <istream>, <iterator>, <limits>, <list>, <locale>, <map>, ...

[C/C++标准库]_[初级]_[构造文件路径(stringByAppendingPathComponent)]

场景:1. 很多情况下需要通过文件夹和文件名拼接文件路径字符串,每次都需要判断是否需要添加路径分隔符seperator很麻烦,所以可以写一个通用函数.2. 大多数情况下都是windows使用wstring,mac使用string,所以用模版实现最通用.函数:template<class T> T AppendPathComponent(const T& source,const T& component) {int length = source.length();int last = (length)?(length-1):0;if(source[last] == 0x5C || source[last] == 0x2...

C++ 标准库 std::remove【代码】

参见:https://zh.cppreference.com/w/cpp/algorithm/remove std::remove 不会改变输入vector / string 的长度。其过程,相当于去除指定的字符(以string为例),剩余字符往前靠。后面的和原始字符保持一致。详见示例程序结果#include <algorithm> #include <string> #include <iostream> #include <cctype>int main() {std::string str1 = "Text with some spaces 123";std::remove(str1.begin(), str1.end(), ‘ ‘);std::cout...

【C++标准库】并发【代码】【图】

高级接口async()和future/* The following code example is taken from the book * "The C++ Standard Library - A Tutorial and Reference, 2nd Edition" * by Nicolai M. Josuttis, Addison-Wesley, 2012 * * (C) Copyright Nicolai M. Josuttis 2012. * Permission to copy, use, modify, sell and distribute this software * is granted provided this copyright notice appears in all copies. * This software is provided ...

[C/C++标准库]_[初级]_[如何实现std::string自己的Format(sprintf)函数]

场景:1. C语言有自己的sprintf函数,但是这个函数有个缺点,就是不知道需要创建多大的buffer, 这时候可以使用snprintf函数来计算大小,只要参数 buffer为NULL, count为0即可.2. 这里实现std::string自己的sprintf也是用了snprintf的特性,先计算大小,再创建空间,之后存入std::string.3. 还使用了C的可变参数特性.std::wstring Format(const wchar_t *format,...) {va_list argptr;va_start(argptr, format);int count = _vsnwprintf...

标准库函数begin和end------c++primer【代码】

尽管能计算得到尾后指针,但这种用法极易出错。为了让指针的使用更简单、更安全,c++新标准引入了两个名为begin和end的函数。这两个函数与容器中的两个同名成员功能类似,不过数组毕竟不是类类型,因此这两个函数不是成员函数。正确的使用形式是将数组作为它们的参数: int a[] = { 0,1,2,3,4,5,6,7,8,9 };int *beg = begin(a);//指向a首元素的指针int *last = end(a);//指向a尾元素的下一位置的指针不能用动态数组这两个函数定义在...

C++标准库里面没有字符分割函数split,自己编写函数实现字符串分割功能【代码】

#include <vector> #include <string> #include <iostream> using namespace std;vector<string> split(const string &s, const string &seperator){vector<string> result;typedef string::size_type string_size;string_size i = 0;while(i != s.size()){//找到字符串中首个不等于分隔符的字母;int flag = 0;while(i != s.size() && flag == 0){flag = 1;for(string_size x = 0; x < seperator.size(); ++x)if(s[i] == seperato...

《Exceptional C++ Style》—— 泛型编程与C++标准库【图】

第1条 vector 的使用 第2条:字符串格式化的“动物庄园”之一:sprintf 第3条:字符串格式化的“动物庄园”之二:标准的(或极度优雅的)替代方案 第4条:标准库成员函数 第5条:泛型编程的风味之一:基础 第6条: 第7条: 第8条: 第9条: 第10条: 第11条: <style></style>

C++菜鸟学习笔记系列(7)——标准库类型string【代码】【图】

C++菜鸟学习笔记系列(7) 本期主题:标准库类型string 我们已经在前面介绍过C++中存在为我们设置好的内置类型。这些类型,比如数字和字符,体现了大多数计算机本身具备的能力。同时为了方便我们的使用,C++还为我们提供了自定义类型的方法。 除了上述之外C++语言还定义了一个内容丰富的抽象数据类型库。string 就是其中一种非常重要的标准库类型。它可以支持可变长字符串,下面作者就对其的使用进行简单介绍。 标准库类型 string表...

C++标准库写的split函数,支持字符串作为切割符号【代码】

void split(const std::string& inputStr, const std::string& seperateStr, std::vectorstd::string& ouputVec) { std::string::size_type startPos = 0; std::string::size_type sepPos = inputStr.find(seperateStr, startPos); while (sepPos != std::string::npos) {std::string singleStr = inputStr.substr(startPos, sepPos - startPos);if (singleStr.size() > 0) {ouputVec.push_back(singleStr);}startPos = sepPos + s...

C++ 标准库

C++ 标准库可以分为两部分:标准函数库: 这个库是由通用的、独立的、不属于任何类的函数组成的。函数库继承自 C 语言。 面向对象类库: 这个库是类及其相关函数的集合。C++ 标准库包含了所有的 C 标准库,为了支持类型安全,做了一定的添加和修改。 标准函数库 标准函数库分为以下几类:输入/输出 I/O 字符串和字符处理 数学 时间、日期和本地化 动态分配 其他 宽字符函数面向对象类库 标准的 C++ 面向对象类库定义了大量支持一些...

c++标准库的一些自由方法

c++中标准库中有很多自由方法,比如swap,copy,从这个方面入手深入学习c++。int casts[10] = {10,21,21,12,121,2,1,12,290,12}; vector<int> vect(10); copy(casts,casts+10,vect.begin()); // 容器必须足够大,否则会出现未知错误。

primer_C++_3.3 标准库类型vector【图】

/* * 用cin读入一组整数并把他们存入一个vector对象 */#include <iostream> #include <vector>using namespace std; int main() { cout << "输入一组整数:";int v2;vector<int> v1; //创建vector对象 // for (int t=0;t!=100;++t) // v1.push_back(t);while (cin >> v2) {v1.push_back(v2); //把v2添加到v1后面}cout << "输出vector:";for(auto c:v1)cout << c;return 0; } #include <iostream> #include <string> #include <v...

《C++标准库(第二版)》第十八章:并发(18.1)

此章的更多细节,作者推荐《C++ Concurrency in Action》——Anthony Williams一书。 一、高级接口:async()和Future (1)async()提供一个接口,让一段技能(a piece of functionality)或说一个callable object若是可能的话在后台运行,成为一个独立线程。 (2)Class future<>允许你等待线程结束并获取其结果(一个返回值,或者也许是一个异常) 1.async()和Future第一个用例 假设要计算两个函数返回值的总和,寻常做法如下:func1()+fun...

c++标准库实战之通用工具Pair【代码】

1.简介 Pair与Tuple都是标准库提供的通用工具,主要用来组合两个或者多个值。 2.Pair Pair可以由<utility>引入,定义在bits/stl_pair.h中/*** @brief Struct holding two objects of arbitrary type.** @tparam _T1 Type of first object.* @tparam _T2 Type of second object.*/template<typename _T1, typename _T2>struct pair: private __pair_base<_T1, _T2>{typedef _T1 first_type; /// @c first_type is the...

C++11标准库(STL)使用总结——array【代码】【图】

array是固定大小的顺序容器,它们保存了一个以严格的线性顺序排列的特定数量的元素。 在内部,一个数组除了它所包含的元素(甚至不是它的大小,它是一个模板参数,在编译时是固定的)以外不保存任何数据。存储大小与用语言括号语法([])声明的普通数组一样高效。这个类只是增加了一层成员函数和全局函数,所以数组可以作为标准容器使用。 与其他标准容器不同,数组具有固定的大小,并且不通过分配器管理其元素的分配:它们是封装固...

C++标准库内存分配类allocator【代码】

1 C++定义两种直接分配内存与释放内存的函数 (1)创建内存空间并构造对象——new (2) 析构对象并释放内存空间——delete 例:int *p =new int;//新建一个int大小的空间delete p;//释放相应的空间 (3)可以使用直接初始化的方式对分配的空间进行直接初始化。当我们未对分配的内存执行初始化时,该内存空间会执行默认初始化 例:vector<int> *pv=new vector<int>{0,1,2,3,4,5,6,7,8,9};string *p=new string("hello world!");s...

为C/C++标准库,boost和第三方库设置单独的ctags db【代码】

我想为/usr/include /中的各种库设置单独的ctags数据库,以便与OmniCppComplete一起使用. 我们的想法是只能引入目标语言(C或C)中特定项目所需的库. 例如,我想为标准C库创建一个数据库,一个用于C或C程序可能使用的系统库(想到套接字/网络),一个用于标准C libs / STL / Boost,然后是各种第三方库的其他数据库,如QT或glib.然后我可以通过在vim中输入set tags =?/ .vim / somelib.tags来简单地提取一些东西. 我假设与C stdlib和STL相关的...

C++11标准库(STL)使用总结——forward_list【代码】【图】

forward_list(单向链表)是序列容器,允许在序列中的任何地方进行恒定的时间插入和擦除操作。 forward_list(单向链表)被实现为单链表; 单链表可以将它们包含的每个元素存储在不同和不相关的存储位置中。通过关联到序列中下一个元素的链接的每个元素来保留排序。forward_list容器和列表 之间的主要设计区别容器是第一个内部只保留一个到下一个元素的链接,而后者每个元素保留两个链接:一个指向下一个元素,一个指向前一个元素,...