江苏天矗建设集团网站,wordpress icp涵数,wordpress破解插件,江苏seo百度推广前些天发现了一个巨牛的人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;忍不住分享一下给大家。点击跳转到网站#xff1a;人工智能教程 文章目录 一、vector 容器1. 基本特性2. 基本操作3. 注意事项 二、应用场景1. 应用场景2. 案例案例一#xff1…前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到网站人工智能教程 文章目录 一、vector 容器1. 基本特性2. 基本操作3. 注意事项 二、应用场景1. 应用场景2. 案例案例一存储动态大小的数据集合案例二实现栈 三、相关链接 一、vector 容器
C 中的 vector 是一个非常常用的容器container它属于 STLStandard Template Library标准模板库的一部分。vector 是一个能够存储具有相同类型元素的动态数组这意味着它可以在运行时动态地增加或减少大小。与普通的数组不同vector 会自动管理其存储空间并在需要时重新分配内存以容纳更多的元素。
1. 基本特性
动态数组vector 的大小可以在运行时改变即可以动态地添加或删除元素。连续内存vector 中的元素存储在连续的内存位置中这意味着可以像普通数组一样通过索引快速访问任何元素即使用 operator[]。自动内存管理vector 自动管理其存储空间的分配和释放无需用户手动处理。随机访问迭代器由于 vector 的元素存储在连续的内存中它支持随机访问迭代器这意味着可以直接通过索引访问任何元素。
2. 基本操作
包含头文件使用 vector 之前需要包含头文件 vector。
#include vector创建 vector
std::vectorint vec; // 创建一个空的 int 类型的 vector
std::vectorint vecWithValues {1, 2, 3, 4, 5}; // 创建一个包含 5 个整数的 vector添加元素
vec.push_back(6); // 在 vec 的末尾添加一个元素 6
vec.insert(vec.begin(), 0); // 在 vec 的开始位置插入一个元素 0访问元素
int firstElement vec[0]; // 访问第一个元素
int lastElement vec.back(); // 访问最后一个元素
int secondElement *(vec.begin() 1); // 使用迭代器访问第二个元素删除元素
vec.pop_back(); // 删除 vec 的最后一个元素
vec.erase(vec.begin()); // 删除 vec 的第一个元素
// 删除特定位置的元素
vec.erase(vec.begin() 2); // 删除索引为 2 的元素注意索引是从 0 开始的遍历 vector
for (int i 0; i vec.size(); i) {std::cout vec[i] ;
}
std::cout std::endl;// 使用迭代器
for (std::vectorint::iterator it vec.begin(); it ! vec.end(); it) {std::cout *it ;
}
std::cout std::endl;// 使用 C11 的范围 for 循环
for (int value : vec) {std::cout value ;
}
std::cout std::endl;3. 注意事项
内存分配当 vector 的大小增加时它可能需要重新分配内存以存储更多的元素。这通常涉及复制或移动所有现有元素到新分配的内存中这可能会是一个耗时的操作。迭代器失效在 vector 中添加或删除元素时特别是通过 insert 或 erase 方法时可能会使指向被修改区域的迭代器失效。因此在迭代过程中修改 vector 时需要特别小心。
vector 是 C 中一个非常强大且灵活的容器几乎可以替代所有需要动态数组的场景。
二、应用场景
vector 容器在 C 中有着广泛的应用场景主要得益于其动态数组的特性能够方便地存储和操作任意数量的同类型元素。以下是一些 vector 容器的应用场景及详细案例
1. 应用场景
存储动态大小的数据集合
当需要存储的数据量在程序运行时可能发生变化时vector 是一个很好的选择。它可以动态地增加或减少大小以适应不同的数据需求。
代替数组
在许多情况下vector 可以作为数组的替代品提供更多的功能和便利的操作。例如vector 支持动态扩容而数组的大小在定义后就不能改变。
实现栈和队列
可以使用 vector 来实现栈和队列等数据结构。通过 push_back() 方法可以在 vector 的末尾添加元素模拟栈的压栈操作通过 pop_back() 方法可以删除 vector 的最后一个元素模拟栈的弹栈操作。对于队列可以使用 insert() 和 erase() 方法在 vector 的前端进行插入和删除操作但通常使用 deque双端队列更为合适因为它在两端都支持快速插入和删除。
实现动态数组
由于 vector 的大小可以动态调整因此它非常适合用来实现动态数组。这在需要频繁增减元素的情况下尤为有用。
存储容器元素
vector 可以作为其他容器的元素实现复杂的数据结构。例如可以创建一个 vectorvectorint 来表示二维数组或矩阵。
作为函数参数
可以将 vector 作为函数的参数传递方便进行数据的传递和处理。由于 vector 支持复制构造函数和赋值操作因此可以很容易地在函数之间传递 vector 对象。
2. 案例
案例一存储动态大小的数据集合
假设我们需要存储一个班级中所有学生的分数但事先不知道学生的具体数量。这时可以使用 vector 来存储这些分数。
#include iostream
#include vectorint main() {std::vectorint scores;// 假设我们不知道学生的具体数量但可以动态地添加分数scores.push_back(90);scores.push_back(85);scores.push_back(95);// 遍历并打印分数for (int score : scores) {std::cout score ;}std::cout std::endl;return 0;
}案例二实现栈
使用 vector 实现一个简单的栈结构支持压栈和弹栈操作。
#include iostream
#include vectorclass Stack {
private:std::vectorint data;public:void push(int value) {data.push_back(value);}int pop() {if (!data.empty()) {int top data.back();data.pop_back();return top;}throw std::out_of_range(Stack is empty!);}bool isEmpty() const {return data.empty();}
};int main() {Stack s;s.push(1);s.push(2);s.push(3);while (!s.isEmpty()) {std::cout s.pop() ;}std::cout std::endl;return 0;
}三、相关链接
Visual Studio Code下载地址Sublime Text下载地址「C系列」C简介、应用领域「C系列」C 基本语法「C系列」C 数据类型「C系列」C 变量类型「C系列」C 变量作用域「C系列」C 常量知识点-细致讲解「C系列」C 修饰符类型「C系列」一篇文章说透【存储类】「C系列」一篇文章讲透【运算符】「C系列」循环「C系列」判断「C系列」函数/内置函数「C系列」数字/随机数「C系列」数组「C系列」字符串「C系列」指针「C系列」引用「C系列」日期/时间「C系列」输入/输出「C系列」数据结构