我是C ++的新手。我尝试过begin
迭代器,然后使用指针指向向量的第一个元素。然后,我打印它们的地址,它们就是0x6efed8 0x6efedc
。
我读过迭代器就像指针的抽象。他们都指的是同一元素,所以我认为结果将是相同的。
为什么它们不同?
如果代码中有问题,也请找出来。
vector<int> data{10,20,30};
auto i = data.begin();
auto* j = &data;
cout << &i << " " << j << endl;
答案 0 :(得分:4)
让我们稍微重写一下代码:
struct foo {
int bar() { return 1; }
};
int main() {
foo data;
auto i = data.bar();
auto* j = &data;
std::cout << &i << " " << j;
}
i
是返回的所有data.bar()
的副本。它是不同类型的不同对象,以不同的内存地址存储。 (...如果将foo
替换为std::vector<int>
,则没有任何改变)
PS:请注意,&data
不是指向第一个元素的指针,而该指针将是&data[0]
,这是又一个地址,因为第一个元素不同于向量本身或迭代器。到第一个元素。
答案 1 :(得分:2)
这里:
vector<int> data{10,20,30};
auto i = data.begin();
begin()
函数返回一个迭代器,该迭代器引用向量的第一个数据元素-即包含10
的元素
同时:
auto* j = &data;
为您提供指向向量本身而不是任何特定元素的指针。
这是两个完全不同的东西; i
和j
的类型完全不同且不相关。