大佬教程收集整理的这篇文章主要介绍了C++ STL标准模板库,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
容器名称 | 描 述 |
---|---|
vector | 作为一个数组实现的一系列项目,在程序执行期间可以根据需要自动增长。项目可以高 效地从矢量末尾添加或删除。从矢量的中间或开始位置插入或删除项目的效率不高 |
deque | 一系列具有头部和尾部的项目:项目可以有效地从头部和尾部添加或删除。在双端队列(deque)的中间插入和删除项目的效率都很低 |
list | 允许从任意位置快速添加和删除的一系列项目 |
容器名称 | 描 述 |
---|---|
set | 存储一组键。不允许重复的值 |
multiset | 存储一组键。允许重复的值 |
map | 将一组键映射到数据元素。每个键都与唯一的数据元素相关联,并且不允许使用重复的键 |
multimap | 将一组键映射到数据元素。相同的键可以关联多个值 |
迭代器类型 | 描 述 |
---|---|
前向(ForWARD) | 只能在容器中向前移动(使用++运算符) |
双向(Bidirectional) | 可以在容器中前后移动(使用++和一运算符) |
随机访问(Random-Access) | 可以在容器中前后移动,还可以直接跳转到指定的数据项目 |
输入(Input) | 可以使用cin从输入设备或文件读取信息 |
输出(Output) | 可以使用emit将信息写入输出设备或文件 |
vector<int>::iterator list<String>::iterator
以上示例都是内部类,可以相应为 vector<int> 和 list<String> 类型的容器提供迭代器。以下示例演示了如何为 int 类型的矢量和 String 列表定义迭代器,并将它们初始化为容器的开始位置。
vector<int> vect;
list<String> myList;
vector<int>::iterator vIter = vect.begin();
list<String>::iterator listIter = myList.begin();
auto vIter = vect.begin();
auto listIter = myList.begin();
auto vlter = begin(vect);
auto listlter = begin(myList);
vector<int> vect { 10,20,30,40,50}; auto vIter = vect.begin(); while (iter != vect.end()) { //打印iter位置的元素并向前迭代 cout << *iter << " "; iter ++; }下面的程序演示了如何使用上述概念知识来处理数组和矢量。它的主要思路是编写如下模板函数:
template<typename T> void print(T begin_iter,T end_iter)
该函数釆用 T 类型形参。作为 T 传递的真实类型需要支持解引用运算符 * 和后缀递增运算符 ++。像这样的类型进入某些 STL 容器中可以作为迭代器,或者进入数组中作为指针。无论哪一种方式,都可以引用 T 作为迭代器类型。// This program demonstrates how iterators and related concepts can be used to write code that works with arrays and STL containers. #include <algorithm> #include <iostream> #include <String> #include <vector> using namespace std; template<typename T> void print(T begin_iter,T end_iter) { auto iter = begin_iter; while (iter != end_iter) { cout << *iter << "; iter++; } cout << endl; } int main() { // Print an array of Strings String names[]{ "Anna","Bob","Chuck" }; print(begin(names),end(names)); // Print a vector of Integers vector<int> vec{ 10,30 }; print(begin(veC),end(veC)); return 0; }程序输出结果:
Anna Bob Chuck
10 20 30
成员函数 | 描 述 |
---|---|
at(position) |
返回矢量中position位置的元素的值。示例: x = vect.at(5); 该语句可以将矢量中位置5的元素的值赋给变量x |
BACk() |
返回对矢量中最后一个元素的引用。示例: cout << vect.BACk() << endl; |
begin() |
返回指向矢量第一个元素的迭代器。示例: iter = vect.begin(); |
capacity () |
返回在不分配额外内存的情况下,矢量中可以存储的元素的最大数量。它和 size 成员函数返回的值并不相同。示例: x = vect.capacity(); 该语句可以将矢量的容量值赋给变量 x |
clear() |
清除矢量中的所有元素。示例: vect.clear(); 该语句可以将 vect 矢量中的元素全部删除掉 |
empty() |
如果矢量为空则返回 true,否则返回 false。示例: if (vect.empty()) cout<< "The vector is empty."; |
end() |
返回指向矢量最后一个元素后面位置的迭代器。示例: iter = vect.end(); |
erase(iter) |
导致迭代器 iter 指向的矢量元素被删除。示例: vect.erase(iter); |
erase(iterl,iter2) |
导致迭代器 iter1 和 iter2 指定的范围中的所有矢量元素都被删除。示例: vect.erase(iter1,iter2); |
front() |
返回对矢量中第一个元素的引用。示例: cout << vector.front() << endl; |
insert(iter,value) |
将一个元素插入到矢量中。示例: vect.insert(iter,X); 该语句可以将值 x 插入到由迭代器 iter 指向的元素的前面 |
insert(iter,n,value) |
将 value 的 n 个副本插入到矢量中。插入的位置就在由迭代器 iter 指向的位置前面。 示例: vect.insert(iter,7,X); 该语句可以将值 x 的 7 个副本插入到由迭代器 iter 指向的元素前面 |
pop_BACk() |
从矢量中删除最后一个元素。示例: vect.pop BACk(); 该语句可以将 vect 矢量的最后一个元素删除掉,这也意味着其大小会被减去 1 |
push_BACk(value) |
将 value 存储为矢量最后一个元素的新值。如果该矢量的容量已经被填满,那么它会自动调整大小。示例: vect.push BACk(7); 该语句可以将 vect 矢量最后一个元素的值存储为 7 |
reverse() |
反转矢量中元素的顺序。最后一个元素变成第一个元素,而第一个元素则变成最后 一个元素。示例: vect.reverse();. |
resize(n) resize(n,value) |
调整矢量的大小,使它拥有 n 个元素,其中 n 大于矢量的当前大小。如果包含了可选的 value 参数,则每个新元素都将使用该值进行初始化。示例,假设 vect 矢量当 前包含 4 个元素: vect.resize(6,99); 该语句可以给矢量添加 2 个元素,并且每个新元素都将被初始化为 99 |
size() |
返回 vector 矢量中元素的个数。示例: cout << vector.size() << endl; |
swap(vector2) |
将当前矢量的内容和 vectors 矢量的内容交换。示例: vectl.swap(vect2); 该语句可以交换矢量 vect1 和 vect2 的内容 |
算 法 | 描 述 |
---|---|
binary_search |
对某个对象执行二分搜索,如果找到对象则返回 true,否则返回 false。示例: binary search(iter1,iter2,value); 在该语句中,iter1 和 iter2 定义了容器中的元素范围(iter1 指向范围中的第一个 元素,iter2 指向范围中最后一个元素之后)。语句对元素范围执行二分搜索,搜索 value。binary_search 函数在找到元素的情况下返回 true,如果未找到元素则返回 false |
count |
返回一个值出现在一个范围内的次数。示例: number = count(iter1, iter2,value); 在该语句中,iter1 和 iter2 定义了容器中的元素范围(iter1 指向范围中的第一个 元素,iter2 指向范围中最后一个元素之后)。该语句返回 value 出现在元素范围内的次数 |
for_each |
为容器中的每个元素执行一个函数。示例: for each(iter1, iter2,func); 在这个语句中,iter1 和 iter2 定义了容器中的元素范围(iter1 指向范围中的第一 个元素,iter2 指向范围中的最后一个元素之后)。第 3 个参数 func 是函数的名称。 该语句为范围中的每个元素调用函数 func,将该元素作为参数传递 |
find |
在容器中查找匹配值的第一个对象并返回一个迭代器。示例: iter3 = find(iter1,value); 在该语句中,iter1 和 iter2 定义了容器中的元素范围(iter1 指向范围中的第一个 元素,iter2 指向范围中最后一个元素之后)。语句在元素范围内搜索 value。如果找到了该值,则函数将返回一个迭代器到包含它的元素,否则返回迭代器 iter2 |
max_element |
返回范围中最大对象的迭代器。示例: iter3 = max element(iter1,iter2); 在该语句中,iter1 和 iter2 定义了容器中的元素范围(iter1 指向范围中的第一个 元素,iter2 指向范围中最后一个元素之后)。该语句返回范围中包含最大值的元素的迭代器 |
min_element |
返回范围中最小对象的迭代器。示例: iter3 = min element(iter1,iter2); 在该语句中,iter1 和 iter2 定义了容器中的元素范围(iter1 指向范围中的第一个 元素,iter2 指向范围中最后一个元素之后)。该语句返回范围中包含最小值的元素的迭代器 |
random_shuffle |
随机重排容器中的元素。示例: random shuffle(iter1,iter2); 在这个语句中,iter1 和 iter2 定义了容器中的元素范围(iter1 指向范围中的第一 个元素,iter2 指向范围中最后一个元素之后)。该语句可随机地重新排列范围中的元素 |
sort |
对某个范围中的元素进行排序。示例: sort (iter1,iter2); 在这个语句中,iter1 和 iter2 定义了容器中的元素范围(iter1 指向范围中的第一 个元素,iter2 指向范围中最后一个元素之后)。该语句将按升序对范围中的元素进行排序。 |
以上是大佬教程为你收集整理的C++ STL标准模板库全部内容,希望文章能够帮你解决C++ STL标准模板库所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。