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中直接用迭代器访问会出错。切记!!!
- 通过下标访问
和访问普通的数组是一样的,对一个定义为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] - 通过迭代器访问
迭代器可以理解为一种类似指针的东西
vector::iterator it;定义迭代器,得到了迭代器it之后,可以通过*it来访问vector中的元素 - v[i]和*(v.begin()+i)是等价的。
- 迭代器来实现了两种自加操作和自减操作。
- begin()函数的作为是为取v的首元素地址,end()函数并不是为了取v的尾元素地址,而是取尾元素地址的下一个地址。它作为迭代器末尾标志,不储存任何元素。
- 在常用STL容器中,只有在vector和string中,才允许使用v.begin()+3这种迭代器加上整数的写法。