: | : | :期货量化学习 | :期货量化 |
返回列表 发帖

C++基础知识【C++ vector 容器】

C++基础知识【C++ vector 容器】

C++ 中的 vector 是一种序列容器,它允许你在运行时动态地插入和删除元素。

vector 是基于数组的数据结构,但它可以自动管理内存,这意味着你不需要手动分配和释放内存。

与 C++ 数组相比,vector 具有更多的灵活性和功能,使其成为 C++ 中常用的数据结构之一。

vector 是 C++ 标准模板库(STL)的一部分,提供了灵活的接口和高效的操作。

基本特性:

动态大小:vector 的大小可以根据需要自动增长和缩小。
连续存储:vector 中的元素在内存中是连续存储的,这使得访问元素非常快速。
可迭代:vector 可以被迭代,你可以使用循环(如 for 循环)来访问它的元素。
元素类型:vector 可以存储任何类型的元素,包括内置类型、对象、指针等。
使用场景:

当你需要一个可以动态增长和缩小的数组时。
当你需要频繁地在序列的末尾添加或移除元素时。
当你需要一个可以高效随机访问元素的容器时。

要使用 vector,首先需要包含 <vector> 头文件:
  1. #include <vector>
复制代码
创建 Vector
创建一个 vector 可以像创建其他变量一样简单:
  1. std::vector<int> myVector; // 创建一个存储整数的空 vector
复制代码
这将创建一个空的整数向量,也可以在创建时指定初始大小和初始值:
  1. std::vector<int> myVector(5); // 创建一个包含 5 个整数的 vector,每个值都为默认值(0)
  2. std::vector<int> myVector(5, 10); // 创建一个包含 5 个整数的 vector,每个值都为 10
复制代码
或:
  1. std::vector<int> vec; // 默认初始化一个空的 vector
  2. std::vector<int> vec2 = {1, 2, 3, 4}; // 初始化一个包含元素的 vector
复制代码
添加元素
可以使用 push_back 方法向 vector 中添加元素:
  1. myVector.push_back(7); // 将整数 7 添加到 vector 的末尾
复制代码
访问元素
可以使用下标操作符 [] 或 at() 方法访问 vector 中的元素:
  1. int x = myVector[0]; // 获取第一个元素
  2. int y = myVector.at(1); // 获取第二个元素
复制代码
获取大小
可以使用 size() 方法获取 vector 中元素的数量:
  1. int size = myVector.size(); // 获取 vector 中的元素数量
复制代码
迭代访问
可以使用迭代器遍历 vector 中的元素:
  1. for (auto it = myVector.begin(); it != myVector.end(); ++it) {
  2.     std::cout << *it << " ";
  3. }
复制代码
或者使用范围循环:
  1. for (auto it = myVector.begin(); it != myVector.end(); ++it) {
  2.     std::cout << *it << " ";
  3. }
复制代码
删除元素
可以使用 erase() 方法删除 vector 中的元素:
  1. myVector.erase(myVector.begin() + 2); // 删除第三个元素
复制代码
清空 Vector
可以使用 clear() 方法清空 vector 中的所有元素:
  1. myVector.clear(); // 清空 vector
复制代码
实例
以下是一个完整的使用实例,包括创建 vector、添加元素、访问元素以及输出结果的代码:
  1. #include <iostream>
  2. #include <vector>

  3. int main() {
  4.     // 创建一个空的整数向量
  5.     std::vector<int> myVector;

  6.     // 添加元素到向量中
  7.     myVector.push_back(3);
  8.     myVector.push_back(7);
  9.     myVector.push_back(11);
  10.     myVector.push_back(5);

  11.     // 访问向量中的元素并输出
  12.     std::cout << "Elements in the vector: ";
  13.     for (int element : myVector) {
  14.         std::cout << element << " ";
  15.     }
  16.     std::cout << std::endl;

  17.     // 访问向量中的第一个元素并输出
  18.     std::cout << "First element: " << myVector[0] << std::endl;

  19.     // 访问向量中的第二个元素并输出
  20.     std::cout << "Second element: " << myVector.at(1) << std::endl;

  21.     // 获取向量的大小并输出
  22.     std::cout << "Size of the vector: " << myVector.size() << std::endl;

  23.     // 删除向量中的第三个元素
  24.     myVector.erase(myVector.begin() + 2);

  25.     // 输出删除元素后的向量
  26.     std::cout << "Elements in the vector after erasing: ";
  27.     for (int element : myVector) {
  28.         std::cout << element << " ";
  29.     }
  30.     std::cout << std::endl;

  31.     // 清空向量并输出
  32.     myVector.clear();
  33.     std::cout << "Size of the vector after clearing: " << myVector.size() << std::endl;

  34.     return 0;
  35. }
复制代码
以上代码创建了一个整数向量,向其中添加了几个元素,然后输出了向量的内容、元素的访问、向量的大小等信息,接着删除了向量中的第三个元素,并输出删除元素后的向量。最后清空了向量,并输出清空后的向量大小。

输出结果为:
  1. Elements in the vector: 3 7 11 5
  2. First element: 3
  3. Second element: 7
  4. Size of the vector: 4
  5. Elements in the vector after erasing: 3 7 5
  6. Size of the vector after clearing: 0
复制代码

论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
 
期货论坛 - 版权/免责声明   1.本站发布源码(包括函数、指标、策略等)均属开放源码,用意在于让使用者学习程序化语法撰写,使用者可以任意修改语法內容并调整参数。仅限用于个人学习使用,请勿转载、滥用,严禁私自连接实盘账户交易
  2.本站发布资讯(包括文章、视频、历史记录、教材、评论、资讯、交易方案等)均系转载自网络主流媒体,内容仅为作者当日个人观点,本网转载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网不对该类信息或数据做任何保证。不对您构成任何投资建议,不能依靠信息而取代自身独立判断,不对因使用本篇文章所诉信息或观点等导致的损失承担任何责任。
  3.本站发布资源(包括书籍、杂志、文档、软件等)均从互联网搜索而来,仅供个人免费交流学习,不可用作商业用途,本站不对显示的内容承担任何责任。请在下载后24小时内删除。如果喜欢,请购买正版,谢谢合作!
  4.龙听期货论坛原创文章属本网版权作品,转载须注明来源“龙听期货论坛”,违者本网将保留追究其相关法律责任的权力。本论坛除发布原创文章外,亦致力于优秀财经文章的交流分享,部分文章推送时若未能及时与原作者取得联系并涉及版权问题时,请及时联系删除。联系方式:http://www.qhlt.cn/thread-262-1-1.html
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

vector 容器也可以嵌套。如下实例:
  1. #include <bits/stdc++.h>
  2. using namespace std;

  3. int main() {
  4.     // 创建一个二维向量,用于存储乘法表
  5.     vector<vector<int>> outer;
  6.    
  7.     // 生成乘法表
  8.     for (int i = 1; i <= 10; i++) {
  9.         // 创建一个一维向量,用于存储当前行的乘法结果
  10.         vector<int> inner;
  11.         for (int j = 1; j <= 10; j++)
  12.             // 计算 i * j 的结果并添加到当前行向量中
  13.             inner.push_back(i * j);
  14.         
  15.         // 将当前行向量添加到外层二维向量中
  16.         outer.push_back(inner);
  17.     }
  18.    
  19.     // 打印乘法表
  20.     for (vector<vector<int>>::iterator iter = outer.begin(); iter != outer.end(); ++iter) {
  21.         // 获取当前行的向量
  22.         vector<int> inner = *iter;
  23.         for (vector<int>::iterator it = inner.begin(); it != inner.end(); ++it)
  24.             // 打印当前元素,设置宽度为 4 个字符,确保对齐
  25.             cout << setw(4) << *it;
  26.         // 打印换行符,开始新的一行
  27.         cout << endl;
  28.     }

  29.     return 0;
  30. }
复制代码
如何访问权限为100/255贴子:/thread-37840-1-1.html;注册后仍无法回复:/thread-23-1-1.html;微信/QQ群:/thread-262-1-1.html;网盘链接失效解决办法:/thread-93307-1-1.html

TOP

返回列表