这是我的代码:
vector<int>::iterator itv = vec.begin();
int *p;
p = itv; // ERROR!
我有一个简单的问题:为什么
谢了。d
通常,迭代器不被定义为原始指针。
在一些编译器的旧版本中,类模板
但是在现代编译器中,标准容器的迭代器通常被定义为某些类的对象。
您可以按以下方式重写代码片段
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
因为
不管怎么说,这是一种令人向往的行为。想象一下类似的情况
std::list<int>::iterator itv;
在这种情况下,如果执行注释中建议的技巧,访问