为迭代器分配地址
assign address to a iterator
因为我们知道 cpp 中的迭代器指向容器的某个元素,就像我们谈论向量一样
vector <int> v = {1,2,3,4,5}
vector<int>::iterator ptr;
ptr=v.begin();
比 ptr 将指向第一个内存块,比如 200让我们声明另一个迭代器
vector<int>::iterator ptrend;
ptrend=v.end()
which point to just next follow of last element say will
be equal to 220
我的疑虑
1)我们知道v.end()-v.begin() = v.size()
但在我们的情况下并非如此220 -200 =20 != size
2)让我们说vector<int>::iterator ptr=v.begin();
在这里我们可以分配这样的东西ptr = &a[3]
首先,查看 C++ 中"指针算术"的定义,它适用于元素,而不是字节。然后,仅仅因为迭代器引用某个地址的对象并不意味着两个迭代器之间的差异与它们引用的两个地址之间的差异是相同的数值。
其次,如上所述,仅仅因为迭代器引用了某个地址并不意味着您可以为该迭代器分配地址。想想是什么让迭代器与指针不同,并将其与你对封装的知识结合起来。
1) 20 字节,是的,考虑到每个元素 4 个字节,这大约是对的。但是计算v.end()-v.begin()
会给你向量的大小(更一般地说,只是随机访问迭代器),而不是它们的地址差异。这不是带有char*
的指针算术,而是在迭代器上operator-
,其实现方式不同。
2)迭代器通常不能从指针中创建。但是您可以使用std::advance(std::begin(a), 3)
,它可以逐个递增,也可以直接使用+3
,具体取决于迭代器类型。
相关文章:
- 将数组的地址分配给变量并删除
- 将地址分配给本地指针后,公共对象的变量将消失
- LLVM 传递以在特定地址分配内存
- 如何按顺序或在指定的地址分配内存?
- C 内存地址分配
- 有没有其他方法可以将地址分配给指针变量
- 我可以将文件描述符的地址分配给变量
- 将地址分配给结构内的指针
- 如何将数组的地址分配给指针
- 尝试将派生类对象地址分配给基类指针的向量
- 将派生的对象地址分配给基础指针和调用击路仪的机制
- 在 c++ 中使用指针访问 2d 数组,如何将地址分配给指针
- 查询与将地址分配给共享_ptr有关
- 将非常量的地址分配给常量指针
- 类的地址分配
- 将 int 自己的地址分配给其值
- 如果指定了参数,如何将地址分配给函数指针
- std::bad_alloc从引用的地址分配指针
- 在该地址c++分配之前和之后相等指针之间的差异
- 在窗口中的特定地址分配数据