哪里有做推文的网站,wordpress 当前分页,广告加盟,做的图怎么上传到网站1. STL容器
什么是STL容器#xff0c;为什么使用它们。向量#xff08;vector#xff09;#xff1a;使用向量存储数据。列表#xff08;list#xff09;#xff1a;使用列表实现双向链表。映射#xff08;map#xff09;#xff1a;使用映射实现键值对存储。
什么…1. STL容器
什么是STL容器为什么使用它们。向量vector使用向量存储数据。列表list使用列表实现双向链表。映射map使用映射实现键值对存储。
什么是STL容器
STL容器是一种用于存储和管理数据的C模板类它们提供了多种数据结构以满足不同的需求。STL容器分为序列容器Sequence Containers和关联容器Associative Containers两大类。序列容器类似于数组关联容器则基于键值对存储数据。
向量vector
向量是序列容器中最常用的之一它类似于动态数组。它具有自动扩展和收缩的能力因此可以根据需要存储任意数量的元素。
#include vector
#include iostreamint main() {std::vectorint myVector; // 创建一个整数向量// 向向量中添加元素myVector.push_back(1);myVector.push_back(2);myVector.push_back(3);// 遍历并输出向量中的元素for (int i : myVector) {std::cout i ;}return 0;
}列表list
列表是双向链表的实现提供了高效的插入和删除操作。与向量不同列表的元素在内存中不是连续存储的因此适用于需要频繁插入和删除操作的情况。列表的简单示例
#include list
#include iostreamint main() {std::liststd::string myList; // 创建一个字符串列表// 向列表中添加元素myList.push_back(Hello);myList.push_back(World);myList.push_front(C);// 遍历并输出列表中的元素for (const std::string str : myList) {std::cout str ;}return 0;
}映射map
映射是关联容器它将键与值关联起来允许通过键快速查找对应的值。这在需要构建字典、查找表或关系映射时非常有用。以下是一个映射的简单示例
#include map
#include iostreamint main() {std::mapstd::string, int myMap; // 创建一个字符串到整数的映射// 向映射中添加键值对myMap[apple] 5;myMap[banana] 3;myMap[cherry] 8;// 查找并输出映射中的值std::cout The number of bananas is: myMap[banana] std::endl;return 0;
}STL容器的强大功能使它们成为C开发中不可或缺的一部分。无论你的项目规模如何STL都提供了各种工具用于有效地管理和操作数据让代码更加高效和可维护。
2. STL算法
什么是STL算法它们的作用。排序算法介绍STL的排序算法。查找算法介绍STL的查找算法。使用STL算法来处理容器中的数据。
什么是STL算法
STL算法是一组通用的、可复用的算法它们独立于特定的容器类型可以用于处理各种数据结构。STL算法可以显著提高代码的可读性和可维护性同时还能提供高效的性能。
排序算法
STL提供了多种排序算法其中最常用的是std::sort()函数它可以对容器中的元素进行升序排序。排序算法
#include algorithm
#include vector
#include iostreamint main() {std::vectorint numbers {5, 2, 8, 1, 9};// 使用std::sort()对向量进行升序排序std::sort(numbers.begin(), numbers.end());// 输出排序后的结果for (int num : numbers) {std::cout num ;}return 0;
}查找算法
STL还提供了多种查找算法其中包括std::find()函数它可以在容器中查找指定的元素。
#include algorithm
#include vector
#include iostreamint main() {std::vectorint numbers {5, 2, 8, 1, 9};int target 8;// 使用std::find()在向量中查找目标元素auto result std::find(numbers.begin(), numbers.end(), target);// 检查查找结果if (result ! numbers.end()) {std::cout Found target at position (result - numbers.begin()) std::endl;} else {std::cout target not found. std::endl;}return 0;
}使用STL算法处理容器中的数据
STL算法通常以迭代器作为参数因此它们可以应用于各种容器如向量、列表、映射等。这使得算法非常通用和灵活。你可以使用std::for_each()、std::transform()等算法来遍历容器中的元素执行自定义的操作。
3. 自定义模板
什么是模板为什么使用模板。函数模板创建可以处理不同数据类型的通用函数。类模板创建可以处理不同数据类型的通用类。
什么是模板
模板是一种通用的代码蓝图它允许你编写可以处理不同数据类型的代码。C中有两种主要类型的模板函数模板和类模板。
函数模板
函数模板允许你编写通用的函数这些函数可以接受不同类型的参数。函数模板的定义以template关键字开始后跟模板参数列表和函数声明。
简单的函数模板用于交换两个值
template typename T
void swapValues(T a, T b) {T temp a;a b;b temp;
}int main() {int x 5, y 10;double a 3.14, b 2.71;swapValues(x, y); // 交换整数swapValues(a, b); // 交换双精度浮点数return 0;
}函数模板的typename T部分表示模板参数它可以是任何数据类型。
类模板
类模板允许你编写通用的类这些类可以处理不同类型的成员变量和成员函数。类模板的定义以template关键字开始后跟模板参数列表和类定义。
类模板用于创建通用的栈数据结构
template typename T
class Stack {
public:Stack() : top(-1) {}void push(T item) {if (top MaxSize - 1) {data[top] item;}}T pop() {if (top 0) {return data[top--];} else {// 处理栈为空的情况throw std::runtime_error(Stack is empty);}}private:static const int MaxSize 100;T data[MaxSize];int top;
};int main() {Stackint intStack;intStack.push(5);intStack.push(10);int x intStack.pop(); // 弹出值为10的元素Stackdouble doubleStack;doubleStack.push(3.14);doubleStack.push(2.71);double y doubleStack.pop(); // 弹出值为2.71的元素return 0;
}类模板的typename T部分表示模板参数可以是任何数据类型。
为什么使用模板
使用模板可以使代码更加通用和灵活无需为不同的数据类型编写重复的代码。模板还有助于提高代码的可维护性只需编写一次通用代码即可适用于多种数据类型。
4. 示例和练习
使用STL容器
使用STL容器的示例代码演示向量vector的用法包括添加元素、遍历容器和查找元素
#include iostream
#include vectorint main() {std::vectorint numbers; // 创建整数向量// 向向量添加元素numbers.push_back(1);numbers.push_back(2);numbers.push_back(3);// 遍历向量并输出元素for (int num : numbers) {std::cout num ;}// 查找元素是否存在int target 2;auto it std::find(numbers.begin(), numbers.end(), target);if (it ! numbers.end()) {std::cout \n target found at position std::distance(numbers.begin(), it);} else {std::cout \n target not found;}return 0;
}使用STL算法
使用STL算法的示例代码演示排序和查找算法的用法
#include iostream
#include vector
#include algorithmint main() {std::vectorint numbers {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};// 排序向量std::sort(numbers.begin(), numbers.end());// 输出排序后的向量for (int num : numbers) {std::cout num ;}// 使用二分查找查找元素int target 5;if (std::binary_search(numbers.begin(), numbers.end(), target)) {std::cout \n target found;} else {std::cout \n target not found;}return 0;
}使用模板
使用函数模板的示例代码如何创建一个通用的函数来比较两个值
#include iostreamtemplate typename T
bool isEqual(T a, T b) {return a b;
}int main() {int x 5, y 5;double a 3.14, b 2.71;if (isEqual(x, y)) {std::cout x and y are equal\n;} else {std::cout x and y are not equal\n;}if (isEqual(a, b)) {std::cout a and b are equal\n;} else {std::cout a and b are not equal\n;}return 0;
}练习题
创建一个向量存储一组学生的分数并计算平均分。
#include iostream
#include vectorint main() {std::vectordouble scores; // 创建一个双精度浮点数向量来存储学生的分数// 向向量添加学生分数scores.push_back(85.5);scores.push_back(92.0);scores.push_back(78.5);scores.push_back(88.0);scores.push_back(90.5);// 计算平均分double sum 0.0;for (double score : scores) {sum score;}double average sum / scores.size();// 输出平均分std::cout 平均分: average std::endl;return 0;
}运行结果 解答
首先包含 iostream 和 vector 头文件来使用C的标准输入输出和向量容器。然后创建一个std::vectordouble类型的向量用于存储学生的分数。使用 push_back 函数将分数添加到向量中。通过迭代向量中的分数计算它们的总和并除以向量的大小来获得平均分。最后输出平均分。
使用STL的列表容器存储一组单词并按字母顺序排序。
#include iostream
#include list
#include algorithmint main() {std::liststd::string words; // 创建一个字符串列表来存储单词// 向列表添加单词words.push_back(apple);words.push_back(banana);words.push_back(cherry);words.push_back(date);words.push_back(fig);// 使用STL的排序算法对单词进行排序words.sort();// 遍历并输出排序后的单词for (const std::string word : words) {std::cout word ;}return 0;
}运行结果 解答
包含了 iostream 和 list 头文件以便使用C的标准输入输出和列表容器。然后创建一个 std::liststd::string 类型的列表用于存储单词。使用 push_back 函数将单词添加到列表中。使用 sort 函数对列表中的单词进行字母顺序排序。最后遍历并输出排序后的单词。
创建一个通用的函数模板用于计算两个数的最大值。
#include iostreamtemplate typename T
T findMax(T a, T b) {return (a b) ? a : b;
}int main() {int intMax findMax(42, 17);double doubleMax findMax(3.14, 2.71);std::cout 最大整数值: intMax std::endl;std::cout 最大双精度浮点数值: doubleMax std::endl;return 0;
}运行结果 解答
定义一个通用函数模板 findMax它可以接受任何类型的参数 a 和 b。函数模板的返回类型也是参数的类型。在 main 函数中演示如何使用这个模板函数来查找整数和双精度浮点数的最大值。
创建一个类模板表示二维坐标点包括x和y坐标。
#include iostreamtemplate typename T
class Point {
public:Point(T x, T y) : x_(x), y_(y) {}void display() const {std::cout X坐标: x_ , Y坐标: y_ std::endl;}private:T x_;T y_;
};int main() {Pointint intPoint(2, 3);Pointdouble doublePoint(1.5, 2.0);std::cout 整数坐标点 std::endl;intPoint.display();std::cout 双精度浮点数坐标点 std::endl;doublePoint.display();return 0;
}运行结果 解答
定义一个类模板 Point它有两个模板参数 typename T表示x和y坐标的类型。类模板有一个构造函数可以接受两个参数分别用于初始化x和y坐标。类模板还有一个成员函数 display用于显示坐标点的值。在 main 函数中我们演示了如何创建不同类型的坐标点。
使用STL的映射容器存储学生的姓名和分数然后按姓名查找分数。
#include iostream
#include map
#include stringint main() {std::mapstd::string, double studentScores; // 创建一个映射容器姓名映射到分数// 向映射容器添加学生和分数studentScores[Alice] 90.5;studentScores[Bob] 88.0;studentScores[Charlie] 92.5;studentScores[David] 85.0;// 按姓名查找分数std::string nameToFind Bob;if (studentScores.find(nameToFind) ! studentScores.end()) {double score studentScores[nameToFind];std::cout nameToFind 的分数是 score std::endl;} else {std::cout 找不到学生 nameToFind std::endl;}return 0;
}运行结果 解答
使用 std::map 容器来创建一个学生姓名到分数的映射。使用方括号操作符 [] 添加学生和分数的映射。使用 find 函数按姓名查找分数如果找到就输出分数如果找不到就输出找不到的消息。 文章转载自: http://www.morning.tklqs.cn.gov.cn.tklqs.cn http://www.morning.hnrqn.cn.gov.cn.hnrqn.cn http://www.morning.qfdyt.cn.gov.cn.qfdyt.cn http://www.morning.fkmrj.cn.gov.cn.fkmrj.cn http://www.morning.jnoegg.com.gov.cn.jnoegg.com http://www.morning.dlurfdo.cn.gov.cn.dlurfdo.cn http://www.morning.lfdmf.cn.gov.cn.lfdmf.cn http://www.morning.jxfsm.cn.gov.cn.jxfsm.cn http://www.morning.hdwjb.cn.gov.cn.hdwjb.cn http://www.morning.kbntl.cn.gov.cn.kbntl.cn http://www.morning.fhlfp.cn.gov.cn.fhlfp.cn http://www.morning.lwcqh.cn.gov.cn.lwcqh.cn http://www.morning.rjnm.cn.gov.cn.rjnm.cn http://www.morning.wrcgy.cn.gov.cn.wrcgy.cn http://www.morning.zwzwn.cn.gov.cn.zwzwn.cn http://www.morning.hpkgm.cn.gov.cn.hpkgm.cn http://www.morning.pcgrq.cn.gov.cn.pcgrq.cn http://www.morning.fqqcd.cn.gov.cn.fqqcd.cn http://www.morning.sjqpm.cn.gov.cn.sjqpm.cn http://www.morning.ldwxj.cn.gov.cn.ldwxj.cn http://www.morning.jqbmj.cn.gov.cn.jqbmj.cn http://www.morning.rydhq.cn.gov.cn.rydhq.cn http://www.morning.dgwrz.cn.gov.cn.dgwrz.cn http://www.morning.fbrshjf.com.gov.cn.fbrshjf.com http://www.morning.vtbtje.cn.gov.cn.vtbtje.cn http://www.morning.ylqpp.cn.gov.cn.ylqpp.cn http://www.morning.mllmm.cn.gov.cn.mllmm.cn http://www.morning.kpbgvaf.cn.gov.cn.kpbgvaf.cn http://www.morning.tddrh.cn.gov.cn.tddrh.cn http://www.morning.yhrfg.cn.gov.cn.yhrfg.cn http://www.morning.tcsdlbt.cn.gov.cn.tcsdlbt.cn http://www.morning.krywy.cn.gov.cn.krywy.cn http://www.morning.fgkwh.cn.gov.cn.fgkwh.cn http://www.morning.ymsdr.cn.gov.cn.ymsdr.cn http://www.morning.jqrhz.cn.gov.cn.jqrhz.cn http://www.morning.buyid.com.cn.gov.cn.buyid.com.cn http://www.morning.lwnwl.cn.gov.cn.lwnwl.cn http://www.morning.fwrr.cn.gov.cn.fwrr.cn http://www.morning.knzdt.cn.gov.cn.knzdt.cn http://www.morning.hympq.cn.gov.cn.hympq.cn http://www.morning.nzdks.cn.gov.cn.nzdks.cn http://www.morning.xwnnp.cn.gov.cn.xwnnp.cn http://www.morning.pkmw.cn.gov.cn.pkmw.cn http://www.morning.hknk.cn.gov.cn.hknk.cn http://www.morning.xnqjs.cn.gov.cn.xnqjs.cn http://www.morning.yxnkr.cn.gov.cn.yxnkr.cn http://www.morning.rkmhp.cn.gov.cn.rkmhp.cn http://www.morning.dtnyl.cn.gov.cn.dtnyl.cn http://www.morning.fplqh.cn.gov.cn.fplqh.cn http://www.morning.hrrmb.cn.gov.cn.hrrmb.cn http://www.morning.fbhmn.cn.gov.cn.fbhmn.cn http://www.morning.lpmjr.cn.gov.cn.lpmjr.cn http://www.morning.rfmzs.cn.gov.cn.rfmzs.cn http://www.morning.fysdt.cn.gov.cn.fysdt.cn http://www.morning.nyfyq.cn.gov.cn.nyfyq.cn http://www.morning.rtbx.cn.gov.cn.rtbx.cn http://www.morning.xesrd.com.gov.cn.xesrd.com http://www.morning.2d1bl5.cn.gov.cn.2d1bl5.cn http://www.morning.rwyd.cn.gov.cn.rwyd.cn http://www.morning.hlrtzcj.cn.gov.cn.hlrtzcj.cn http://www.morning.lchtb.cn.gov.cn.lchtb.cn http://www.morning.njpny.cn.gov.cn.njpny.cn http://www.morning.dmcxh.cn.gov.cn.dmcxh.cn http://www.morning.hgsmz.cn.gov.cn.hgsmz.cn http://www.morning.nlgyq.cn.gov.cn.nlgyq.cn http://www.morning.newfeiya.com.cn.gov.cn.newfeiya.com.cn http://www.morning.jygsq.cn.gov.cn.jygsq.cn http://www.morning.nfnxp.cn.gov.cn.nfnxp.cn http://www.morning.qwdlj.cn.gov.cn.qwdlj.cn http://www.morning.bdgb.cn.gov.cn.bdgb.cn http://www.morning.kwnbd.cn.gov.cn.kwnbd.cn http://www.morning.rdlrm.cn.gov.cn.rdlrm.cn http://www.morning.spghj.cn.gov.cn.spghj.cn http://www.morning.rdlong.com.gov.cn.rdlong.com http://www.morning.hncrc.cn.gov.cn.hncrc.cn http://www.morning.csjps.cn.gov.cn.csjps.cn http://www.morning.dzqyn.cn.gov.cn.dzqyn.cn http://www.morning.tbnpn.cn.gov.cn.tbnpn.cn http://www.morning.sfwcb.cn.gov.cn.sfwcb.cn http://www.morning.fbhmn.cn.gov.cn.fbhmn.cn