ESP IDF:创建并打印vector的元素值

在ESPIDF环境下,创建并打印vector元素时,直接使用迭代器访问可能会出错。推荐通过下标访问或使用`begin()`和`end()`。`begin()`返回首元素地址,`end()`返回尾元素地址的下一个位置。文章强调了在vector中,`v[i]`等同于`*(v.begin()+i)`,并提醒读者注意迭代器超出范围的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ESP IDF:创建并打印vector的元素值

程序:

#include <stdio.h>
#include

std::vector v;
std::vector::iterator pBegin = v.begin();
std::vector::iterator pEnd = v.end();

void test_vector()
{
v.push_back(10);
v.push_back(20);
v.push_back(30);
v.push_back(40);
// std::for_each(pBegin,pEnd,PrintVector);
// PrintVector(v.begin);
for (int i = 0; i < v.size(); i++)
{
printf(“v is %d\n”, v[i]);
}
printf(“v is %d\n”, *v.begin());
printf(“v is %d\n”, *(v.end()-1));
// printf(“v is %d\n”, *pBegin); //直接用迭代器访问会出错
// printf(“v is %d\n”, *(pEnd-1)); //直接用迭代器访问会出错
}

extern “C” void app_main(void)
{
test_vector();
}

运行结果:

在这里插入图片描述

vector容器内元素的访问:

下面是Vector元素访问方法,但是在ESP IDF中直接用迭代器访问会出错。切记!!!

  1. 通过下标访问
    和访问普通的数组是一样的,对一个定义为vector v的vector容器,直接使用v[index]访问即可,其中i n d e x ∈ [ 0 , v . s i z e ( ) − 1 ] index\in[0,v.size()-1]index∈[0,v.size()−1]
  2. 通过迭代器访问
    迭代器可以理解为一种类似指针的东西
    vector::iterator it;定义迭代器,得到了迭代器it之后,可以通过*it来访问vector中的元素
  3. v[i]和*(v.begin()+i)是等价的。
  4. 迭代器来实现了两种自加操作和自减操作。
  5. begin()函数的作为是为取v的首元素地址,end()函数并不是为了取v的尾元素地址,而是取尾元素地址的下一个地址。它作为迭代器末尾标志,不储存任何元素。
  6. 在常用STL容器中,只有在vector和string中,才允许使用v.begin()+3这种迭代器加上整数的写法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值