作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的代码:
vector<int>::iterator itv = vec.begin();
int *p;
p = itv; // ERROR!
我有一个简单的问题:为什么p
不能得到itv
的值,因为p
是地址,itv
也是地址。
谢谢。 :D
最佳答案
一般来说,迭代器不定义为原始指针。
在某些编译器的旧版本中,类模板 std::vector
的迭代器确实被定义为只是一个指针。
但在现代编译器中,标准容器的迭代器通常被定义为某些类的对象。
您可以通过以下方式重写您的代码片段
vector<int>::iterator itv = vec.begin();
int *p;
p = &( *itv );
但更简单更安全的方法是写
int *p = vec.data();
这是一个演示程序。
#include <iostream>
#include <vector>
int main()
{
std::vector<int> vec = { 1, 2, 3, 4, 5 };
for ( int *p = vec.data(); p != vec.data() + vec.size(); ++p )
{
std::cout << *p << ' ';
}
std::cout << '\n';
return 0;
}
程序输出是
1 2 3 4 5
关于c++ - 为什么不能 p = itv?(来自 C++ 的 vector 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65564890/
这是我的代码: vector::iterator itv = vec.begin(); int *p; p = itv; // ERROR! 我有一个简单的问题:为什么p不能得到itv的值,因为p是地
我是一名优秀的程序员,十分优秀!