C++ vector容器类型

MFC程序中加入#include <vector>会导致错误,但去掉这行就没问题 在MFC程序中,如果需要使用STL的std::vector,需要手动添加对STL的支持。通过这些步骤,我们可以成功地在MFC程序中使用std::vector,并避免错误的发生。本文将讨论在MFC程序中加入#include 导致错误的情况,并提供相应的解决方案。当我们在MFC程序中加入#include 这行代码后,编译器可能会给出一些错误提示,如“未找到vector”或“未定义的标识符vector”。通过以上修改,我们成功地将STL的支持引入了MFC程序中,从而解决了#include 导致的错误。 阅读详情

vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分 ,为了使用vector 我们必须包含相关的头文件  :

#include <vector>

使用vector有两种不同的形式,即所谓的数组习惯和 STL习惯。

一、数组习惯用法

1. 定义一个已知长度的 vector :

vector< int > ivec( 10 );  //类似数组定义int ia[ 10 ];

可以通过ivec[索引号] 来访问元素

使用 if ( ivec.empty() ) 判断是否是空,ivec.size()判断元素个数。

 

2. vector的元素被初始化为与其类型相关的缺省值:算术和指针类型的缺省值是 0,对于class 类型,缺省值可通过调用这类的缺省构造函数获得,我们还可以为每个元素提供一个显式的初始值来完成初始化,例如  
vector< int > ivec( 10, -1 ); 
定义了 ivec 它包含十个int型的元素 每个元素都被初始化为-1 

对于内置数组 我们可以显式地把数组的元素初始化为一组常量值,例如 : 
int ia[ 6 ] = { -2, -1, 0, 1, 2, 1024 };


我们不能用同样的方法显式地初始化 vector ,但是可以将 vector 初始化为一个已有数组的全部或一部分,只需指定希望被用来初始化 vector 的数组的开始地址以及数组最末元的下一位置来实现,例如:  
// 把 ia 的 6 个元素拷贝到 ivec 中 
vector< int > ivec( ia, ia+6 );
  


被传递给ivec 的两个指针标记了用来初始化对象的值的范围,第二个指针总是指向要拷贝的末元素的下一位置,标记出来的元素范围也可以是数组的一个子集,例如 :

// 拷贝 3 个元素 ia[2], ia[3], ia[4] 
vector< int > ivec( &ia[ 2 ], &ia[ 5 ] );


3. 与内置数组不同 vector 可以被另一个 vector 初始化 或被赋给另一个 vector 例如  
vector< string > svec; 
void init_and_assign() 
{ 
    // 用另一个 vector 初始化一个 vector 
    vector< string > user_names( svec ); 
    // ... 
 
    // 把一个 vector 拷贝给另一个 vector 
    svec = user_names; 
}

 

二、STL习惯用法

在 STL9中对vector 的习惯用法完全不同。我们不是定义一个已知大小的 vector,而是定义一个空 vector  
vector< string > text;


1. 我们向 vector 中插入元素,而不再是索引元素,以及向元素赋值,例如 push_back()操作,就是在 vector 的后面插入一个元素下面的 while 循环从标准输入读入一个字符串序列并每次将一个字符串插入到 vector 中  
string word; 
while ( cin >> word ) { 
text.push_back( word ); 
// ... 
}

虽然我们仍可以用下标操作符来迭代访问元素  
cout << "words read are: \n"; 
 
for ( int ix = 0; ix < text.size(); ++ix ) 
      cout << text[ ix ] << ' '; 
 
cout << endl; 
但是 更典型的做法是使用 vector 操作集中的begin()和 end()所返回的迭代器 iterator  
对 :
cout << "words read are: \n"; 
 
for ( vector<string>::iterator it = text.begin(); 
    it != text.end(); ++it ) 
           cout << *it << ' '; 
 
cout << endl 
iterator 是标准库中的类,它具有指针的功能 


*it; 
对迭代器解引用,并访问其指向的实际对象  
++it;

向前移动迭代器 it 使其指向下一个元素  

2. 注意 不要混用这两种习惯用法, 例如,下面的定义  
vector< int > ivec; 
定义了一个空vector 再写这样的语句  
ivec[ 0 ] = 1024; 
就是错误的 ,因为 ivec 还没有第一个元素,我们只能索引 vector 中已经存在的元素 size()操作返回 vector 包含的元素的个数 。

3. 类似地 当我们用一个给定的大小定义一个 vector 时,例如  :
vector<int> ia( 10 ); 
任何一个插入操作都将增加vector 的大小,而不是覆盖掉某个现有的元素,这看起来好像是很显然的,但是 下面的错误在初学者中并不少见 :
const int size = 7; 
int ia[ size ] = { 0, 1, 1, 2, 3, 5, 8 }; 
vector< int > ivec( size ); 
 
for ( int ix = 0; ix < size; ++ix ) 
    ivec.push_back( ia[ ix ]); 
程序结束时ivec 包含 14 个元素, ia 的元素从第八个元素开始插入。

掌握C++中Vector容器存储自定义类型的关键技巧 本文还有配套的精品资源,点击获取 简介:在C++中, std::vector 容器能够动态存储同一类型的元素,包括自定义类型如结构体和类。在将自定义类型元素放入 vector 时,必须确保类型支持拷贝构造函数和赋值运算符,以处理容器的动态操作。本文将详细探讨如何在 vector 中使用自定义类型,并涵盖相关的注意事项和最佳实践,包括... 阅读详情

相关推荐

MFC的vector小例子

MFC的vector小例子

怎么在MFC中使用vector

在MFC中使用vector需要用到STL(Standard Template Library)。使用方法如下: 在项目属性中的C/C++选项卡中的预处理器定义中加入_AFXDLL。 在stdafx.h文件中包含头文件。 在需要使用vector的地方定义一个vector变量,如vector myVector; 使用vector的相关方法进行操作,如myVector.push_back(1);...

weixin_42591908的博客 1770

告别手动处理:用 Bruker NSMatlabUtilities 工具箱批量分析 AFM 力曲线数据的实战案例

本文介绍了如何使用 Bruker NSMatlabUtilities 工具箱实现 AFM 力曲线数据的批量分析,解决传统手动处理耗时且易出错的问题。通过实战案例展示工具箱的核心功能,包括数据读取、力曲线分析和可视化,帮助科研人员提升数据处理效率和准确性。

weixin_28362173的博客 213

MFC中STL容器中Vector,List,Map基本用法汇总

容器就是数据结构的泛指,迭代器就是指针的泛指,可以指向元素。它可以用来存储数据,就比如杯子用来装水一样。而STL中的容器有很多,它包括vector,list,map,deque,set等。我就简单列举vector,list,map为例吧, 1.Vector 又称向量,跟数组结构差不多。它的内存是连续的,拥有与数组一样的特点,但它又更加灵活,可以在首尾两端插入删除数据更加方便。支持[]操作符,在

leiyang2014的博客 1万+

FPGA实战:从零构建eMMC控制器(Verilog篇)

本文详细介绍了如何使用Verilog从零构建FPGA上的eMMC控制器,涵盖eMMC接口基础、命令系统解析、关键模块设计及性能优化技巧。通过实战案例,帮助开发者掌握高速数据存储解决方案,提升嵌入式系统开发能力。

weixin_26802933的博客 297

飞书多维表格+影刀RPA:我如何用3个指令搞定每周的销售数据自动汇总(附完整配置截图)

本文详细介绍了如何利用飞书多维表格和影刀RPA实现销售数据的自动化汇总,通过三个核心指令(建立链接、列出记录、更新记录)简化繁琐的手工操作。文章包含完整的配置截图和实战指南,帮助用户快速部署自动化流程,提升工作效率。

weixin_29273849的博客 284

MFC使用笔记-vector

因为vector使用的的连续的内存,带来的一些影响: 一、erase(nPos)函数 开启循环,将nPos位元素后的元素依次复制给前一位,并删除最后一位元素; 元素复制调用元素自身的“=”运算符; for循环中调用时,要特别留意变量的范围; 结论:复杂元素向量,尽量避免调用,若不需要支持随机读取改用list可能更合适; 二、push_back()函数 vector新建时会在预留一些空元...

Hawly_Yang的博客 4177

DeepSeek-R1模型+Dify实战:5步打造能读PDF的智能客服(附BGE-M3嵌入模型配置)

本文详细介绍了如何利用DeepSeek-R1大模型与Dify平台,结合BGE-M3嵌入模型,构建企业级智能文档问答系统。通过5个步骤,从环境准备到知识库构建,再到智能问答应用开发,帮助企业快速从PDF等文档中提取关键信息,提升工作效率。特别适合处理产品手册、内部规程等专业内容。

convnet3designer的博客 719

C++vector存放自定义数据类型 vector容器 容器

C++vector存放自定义数据类型 vector容器 容器 #include <iostream> #include <string> #include <vector> using namespace std; class Person { public: Person(string name, int age) { m_Name = name; m_Age = age; } public: string m_Name; int m_Age; }

qq_36711295的博客 528

2026华为OD机试真题 9月27日 新系统 【均衡调度】

华为OD机试真题 新系统 9月27号【均衡调度】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【均衡调度】多语言题解。

qq_45776114的博客 1762

使用Python实现深度学习模型:智能极端天气事件预测

在本项目中,我们成功利用Python和Keras库构建了一个基于LSTM的极端天气预测模型。通过时间序列数据,模型能够识别天气趋势并预测未来的极端天气事件。尽管这是一个简化的示例,但它为实际应用中如何利用深度学习进行天气预测提供了一个很好的基础。随着更精确的数据和更多的特征信息,类似的模型可以进一步扩展到其他极端事件预测上,如风暴预警、气象灾害评估等。

Echo_Wish 730

【C++ STL容器】Vector存放内置数据类型和存放自定义数据类型以及Vector容器嵌套容器

指针存放的是值得地址对指针的截引用获取地址对应得值​//自定义数据类型public:mAge = age;//存放对象​​//创建数据​​it!= v.end();it++) {​​​//放对象指针​//此时的v相当于一个 指针数组 用于存放指针地址的数组​//创建数据​​it!= v.end();​test02();

weixin_72851290的博客 300

内存泄漏系列专题分析之二十三:meminfo无法统计到的黑洞内存泄漏分析

内存泄漏系列专题分析之二十三:meminfo无法统计到的黑洞内存泄漏分析

683

C++ vector初学 vector 存放内置数据类型 存放自定义数据类型 存放自定义数据类型指针 Vector 容器嵌套容器

vector 存放内置数据类型 #include<iostream> using namespace std; #include<vector> #include<algorithm>//标准算法头文件 //vector 容器存放内置数据类型 void test01(){ //创建了一个vector容器,数组 vector<int> v; //向容器中插入数据 v.push_back(10);//尾插法 v.push_back(20); v.

一季南凉的博客 1161

使用mid360运行lio-livox对比fast-lio2

msg_type为激光雷达发出的数据格式,有livox自定义数据类型格式CustomMsg和ros标准的PointCloud2格式,因此首先需要确定激光雷达端配置的是哪种格式。可以从激光雷达的ros驱动中看到驱动端有三种格式可以选,驱动端的数字2对应lio-livox中的1,驱动端的0对应lio-livox的格式0。如果使用的是Ubuntu18.04编译完成后运行直接成功,如果使用20.04运行会报错,需要修改以下源代码。针对livox-mid360 运行lio-livox的一些问题。

z1872385的博客 1228

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

C++容器类型vector存储不同类型数据(包括其他容器)-总结

在C++中,使用vector来存储其他容器类型,通过将其他容器类型作为向量的元素来实现。

book_dw5189的博客 4123

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C++:vector(容器)类型介绍

C++:vector(容器)类型介绍

2301_80864377的博客 406

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C++Primer——标准库vector(容器)类型

转自:http://blog.chinaunix.net/u2/68268/showart_673545.htmlC++Primer——标准库vector(容器)类型1 标准库vector(容器)类型#include using std :: vector ; vector ivec;vector  myvec;vec

showna123的专栏 681

C++ vector容器类型的使用

vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分 ,为了使用vector 我们必须包含相关的头文件 : #include <vector> 使用vector有两种不同的形式,即所谓的数组习惯和STL习惯。 一、数组习惯用法 1. 定义一个已知长度的 vector : vector< int &gt...

FJY_sunshine的博客 326

C++基础之Vector容器中存放自定义数据类型

1. 先介绍一下存放内置数据类型的Vector容器使用。 #include <iostream> #include <vector> //vector的头文件 #include <algorithm> //标准算法的头文件 void fun_creat_vector (){ std::vector<int8_t> data; // 创建一个vector容器 data.push_back(1); // 向容器中插入数据1 data.

Code_D张腾的博客 1960

【C++ STL容器】:vector存放数据以及存放自定义的数据类型

向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组,暂且把它理解为我们之前学过的数组Array。

W_Oilpicture的博客 6653
上一篇: 幽默人讲解R3枚举目标进程加载模块的全过程
下一篇: 城里城外看SSDT
M-先生
博客等级 码龄17年 60粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值