一、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
-
概念
vector是一个序列化容器,相当于可以改变大小的数组。 -
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;
}
不往下写了,太费事,有问题自己看上面的官网参考,里面很详细。