C++STL

强大的模板库——Standard Template Library

STL是Standard Template Library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用安装额外的库文件。
STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。

C++ Iterators(迭代器)

迭代器可被用来访问一个容器类的所包含的全部元素,其行为像一个指针。举一个例子,你可用一个迭代器来实现对vector容器中所含元素的遍历。有这么几种迭代器如下:

迭代器 描述
input_iterator 提供读功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)
output_iterator 提供写功能的向前移动迭代器,它们可被进行增加(++),比较与解引用(*)
forward_iterator 可向前移动的,同时具有读写功能的迭代器。同时具有input和output迭代器的功能,并可对迭代器的值进行储存。
bidirectional_iterator 双向迭代器,同时提供读写功能,同forward迭代器,但可用来进行增加(++)或减少(–)操作。
random_iterator 随机迭代器,提供随机读写功能.是功能最强大的迭代器, 具有双向迭代器的全部功能,同时实现指针般的算术与比较运算。

第种容器类都联系于一种类型的迭代器。第个STL算法的实现使用某一类型的迭代器。举个例子,vector容器类就有一个random-access随机迭代器,这也意味着其可以使用随机读写的算法。既然随机迭代器具有全部其它迭代器的特性,这也就是说为其它迭代器设计的算法也可被用在vector容器上。

提示:通过对一个迭代器的解引用操作(*),可以访问到容器所包含的元素。

栈(stack) 后进先出的值的排列

C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出FILO的数据结构。

bool empty();
如当前堆栈为空,empty()函数返回true否则返回false

void pop();
移除堆栈中最顶层元素

void push(const TYPE &val);
将val值压栈,使其成为栈顶的第一个元素

size_type size();
返回当前堆栈中的元素数目

void top();
返回对栈顶元素的引用
while (!s.empty())
{
	cout << s.top() << " ";
	s.pop();
}

vector向量

Vectors 包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度

vector<type> v();创建一个空vector

vector<type> v(capacity);创建一个容量为capacity的vector

vector<type> v(capacity, val);每个元素值为val

void clear();
删除当前vector中的所有元素

size_type capacity();
返回v当前所具有的存储单元的容量

size_type size();
返回当前存储在v中的值的个数

bool empty();
当且仅当v不包含值时返回true

void reserve(size_type size);
增大v使得容量为n(不影响v的大小)

void push_back(cosnt TYPE &val);
添加value到v的尾部

void pop_back();
删除最后一个元素

TYPE front();
返回指向v的第一个元素的引用,注意这里是引用

TYPE back();
返回指向v的最后一个元素的引用,注意这里是引用,意味着可以修改

TYPE at(size_type loc);
返回下标为loc的元素

v1 = v2;将v2拷贝给v1

void swap(vector &from);
v1和v2交换内容

iterator begin();
返回一个指向当前vector起始元素的迭代器

iterator end();
返回一个指向当前vector末尾元素的下一个位置的迭代器,如果访问末尾元素需要自减1

erase(iterator loc);
删除指定位置的loc元素

erase(iterator start, iterator end);
删除区间[start,end)所有元素

//创建一个vector,置入字母表的前10个字符
vector<char> alphaVector;
for (int i = 0; i < 10; i++)
{
	alphaVector.push_back(i + 65);
}
int size = alphaVector.size();

vector<char>::iterator startIterator;
vector<char>::iterator tempIterator;

for (int i = 0; i < size; i++)
{
	startIterator = alphaVector.begin();
	alphaVector.erase(startIterator);

	for (tempIterator = alphaVector.begin(); tempIterator != alphaVector.end(); tempIterator++)
	{
		cout << *tempIterator;
	}
	cout << endl;

}

iterator insert(iterator loc, const TYPE &val);
在指定位置loc前插入值为value的元素,返回指向这个元素的迭代器

void insert(iterator loc, size_type num, const TYPE &val);
在指定位置loc前插入num个值为val的元素

void insert(iterator loc, input_iterator start, input_iterator end)
在指定位置loc前插入区间[start, end)的所有元素

C++ Strings(字符串)

s和str是string,ca是一个字符数组,str_ca是一个字符串或者一个字符数组,str_ca_ch是一个字符串,一个字符数组或一个字符,ch是一个字符,n、n1、n2、pos1、pos2是整数。

string();
初始化一个空串

string(size_type length, char ch);
以length为长度的ch的拷贝

string(const char *str);
以str为初值

size_type capacity();
返回在重新申请更多的空间前字符串可以容纳的字符数

size_type size();
返回字符串中现在拥有的字符数。

void reserve(size_type num);
设置本字符串的capacity

size_type length();
函数返回字符串的长度. 这个数字应该和size()返回的数字相同。

size_type max_size();
函数返回字符串能保存的最大字符数。

basic_string &append(const basic_string &str);
在字符串的末尾添加str

basic_string &append(size_type num, char ch);
在字符串的末尾添加num个字符ch

basic_string &append(input_iterator start, input_iterator end);
在字符串的末尾添加以迭代器start和end表示的字符序列

iterator insert(iterator i, const char &ch);
在迭代器i表示的位置前面插入一个字符ch

basic_string &insert(size_type idnex, const basic_string &str);
在字符串的位置index插入字符串str

void swap(basic_string str);
把str和本字符串交换

basic_string &append(const basic_string &str);
在字符串尾部添加str

basic_string substr(size_type index, size_type num = npos);
返回本字符串的一个子串从idnex开始,长num个字符,如果没有指定,将是默认值npos

eg:
	string s("What we have here is a failure to comminicate");

    string sub = s.substr(21);
    
    cout << "The original string is " << s << endl;
    cout << "The substring is " << sub << endl;

reference at(size_type idnex);
返回对字符串s中位置i上的字符的引用,如果i越界的话会产生一个异常

iterator erase(iterator pos);
删除pos指向的字符,返回指向下一个字符的迭代器

iterator erase(iterator start, iterator end);
删除从strat到end所有的字符

size_type find(cosnt basic_string &str, size_type idnex);
返回str在字符串中第一次出现的位置(从idnex开始查找)

compare(str_ca1);
this < str;返回值小于0
this == str;返回值等于0
this > str;返回值大于0

empty();
如果字符串为空,返回真

iterator begin();
返回一个迭代器,指向第一个字符

iterator end();
返回一个迭代器,指向字符串的末尾

猜你喜欢

转载自blog.csdn.net/WxqHUT/article/details/88075578