C++ 标准模板库(Standard Template Library)

一、STL概念

STL 是由容器、算法、迭代器、函数对象、适配器、内存分配器这 6 部分构成,其中后面 4 部分是为前 2 部分服务的。
** 构成含义:**

STL的组成含义
容器一些封装数据结构的模板类,例如 vector 向量容器、list 列表容器等。
算法STL 提供了非常多(大约 100 个)的数据结构算法,它们都被设计成一个个的模板函数,这些算法在 std 命名空间中定义,其中大部分算法都包含在头文件 中,少部分位于头文件 中。
迭代器如果一个类将 () 运算符重载为成员函数,这个类就称为函数对象类,这个类的对象就是函数对象(又称仿函数)。
适配器可以使一个类的接口(模板的参数)适配成用户指定的形式,从而让原本不能在一起工作的两个类工作在一起。值得一提的是,容器、迭代器和函数都有适配器。
内存分配器为容器类模板提供自定义的内存申请和释放功能,由于往往只有高级用户才有改变内存分配策略的需求,因此内存分配器对于一般用户来说,并不常用。

头文件:
C++ 标准中,它们被重新组织为 13 个头文件:
在这里插入图片描述
按照 C++ 标准库的规定,所有标准头文件都不再有扩展名。以 <vector> 为例,此为无扩展名的形式,而 <vector.h> 为有扩展名的形式。
C++ 11标准和C++ 98标准:
就是两个C++的标准,11新一点,在98的基础上做了修改。

二、string类

官网参考链接
1. 概念

C++的string属于STL(Standard Template Library, 标准模板库)中的定义的类。
程序中使用string类,必须包含头文件 。如下:

#include <string>

string是一个模板类,位于std命名空间内,为方便使用还需要在程序中增加:
using namespace std;  // 指定缺省的使名空间。

string str;       // 创建string对象。

如果不指定命名空间,也就是说没有using namespace std,创建string对象的方法如下:
std::string str;

注意这里不是string.h,string.h是C语言字符串头文件。

2. string的重载的操作符
可以用=直接赋值。

可以用 ==、>、<、>=、<=、和!=比较字符串。

可以用+或者+=操作符连接两个字符串。

可以用[]获取指定位置的字符,类似数组。

3. 成员函数

const char *c_str();
string类采用动态分配内存的方式来存放字符串,c_str函数返回这个字符串的地址。

  std::string str1;
  str1="hello world";
  char str2[31];
  strcpy(str2,str1.c_str());
可用下列函数来获得string的一些特性。

  int size();             // 返回当前字符串的大小。
  int length();           // 返回当前字符串的长度,注意和size的区别。
  void clear();           // 清空字符串。

string的成员函数有很多,可以看官方参考资料。

三、vector

官网参考链接

  1. 概念
    vector是一个序列化容器,相当于可以改变大小的数组。

  2. Member Functions(成员函数)
    vector的成员函数特别多,这里我只介绍常用的,想了解更多就点上面的官网参考链接。
    Construct(构造)

void construct()
{   
    std::vector<int> first;                                // empty vector of ints
    std::vector<int> second (4,100);                       // four ints with value 100
    std::vector<int> third (second.begin(),second.end());  // iterating through second
    std::vector<int> fourth (third);                       // a copy of third

    int myint[]={16,2,3};
    printf("sizeof(myint)=%ld sizeof(int)=%ld\n",sizeof(myint),sizeof(int));
    std::vector<int> fifth(myint,myint+sizeof(myint)/sizeof(int));//这个地方会有疑问,是因为迭代器的end()指向的是最后一个元素的下一个位置,也就是最后一个元素位置加1,所以这里就是要myint+3(而不是加2)
}

destructor(析构)
会自动销毁容器对象。

operator=(重载=符号)
vector中重写了操作符=,用法如下:

// vector assignment
#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> foo (3,0);
  std::vector<int> bar (5,0);

  bar = foo;//将foo的结构及数据赋给bar
  foo = std::vector<int>();//将新构造的容器赋给foo

  std::cout << "Size of foo: " << int(foo.size()) << '\n';
  std::cout << "Size of bar: " << int(bar.size()) << '\n';
  return 0;
}

④Capacity:
begin: 返回容器中第一个元素的迭代器。
end: 返回容器中最后一个元素后的迭代器,值是最后一个元素迭代器+1。如果容器是空的,那返回值和begin是一样的。
size: 返回容器大小,即容器中元素的个数。
max_size: 返回容器所能容纳元素的最大数。

#include <iostream>
#include <vector>

int main ()
{
  std::vector<int> myvector;
  for (int i=1; i<=5; i++) myvector.push_back(i);

  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it = myvector.begin() ; it != myvector.end(); ++it)
  std::cout << ' ' << *it;
  std::cout << '\n';

  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it = myvector.begin() ; it != myvector.end(); ++it)
  std::cout << ' ' << *it;
  std::cout << '\n';
  
  return 0;
}

不往下写了,太费事,有问题自己看上面的官网参考,里面很详细。

1 STL 简介 ..............................................................................................................................................2 2 顺序性容器...........................................................................................................................................2 2.1 C++ VECTOR(向量容器) ...........................................................................................................2 2.2 C++ LIST(双向链表) .................................................................................................................4 2.3 C++ DEQUE(双向队列) ..................................................................................................................6 2.4 三者比较........................................................................................................................................8 3 关联容器...............................................................................................................................................8 3.1 特点................................................................................................................................................8 3.2 C++ SETS & MULTISETS .................................................................................................................9 3.3 C++ MAPS & MULTIMAPS ............................................................................................................ 11 4 容器适配器.........................................................................................................................................12 4.1 特点..............................................................................................................................................12 4.2 C++ STACKS(堆栈) ..................................................................................................................13 4.3 C++ QUEUES(队列) ......................................................................................................................13 4.4 C++ PRIORITY QUEUES(优先队列)...............................................................................................13 5 迭代器.................................................................................................................................................14 5.1 解释..............................................................................................................................................14 5.2 功能特点......................................................................................................................................14 6 C++标准总结..................................................................................................................................15 6.1 容器..............................................................................................................................................15 6.2 算法..............................................................................................................................................15 6.3 函数对象......................................................................................................................................17 6.4 迭代器..........................................................................................................................................19 6.5 分配器..........................................................................................................................................19 6.6 数值..............................................................................................................................................19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值