如何解决为什么不能在cpp中取消引用向量地址的引用?
我正在尝试如下取消对引用的向量地址的引用:
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<int> p;
p.push_back(1);
p.push_back(2);
p.push_back(3);
p.push_back(4);
p.push_back(5);
p.push_back(6);
cout << (*(&p)) << endl;
cout << (*(&p + 3)) << endl;
return 0;
}
但是失败了。
期望的输出:
1
4
解决方法
std::vector<int> p;
是一个对象,用于管理int
类型的元素的连续存储。
&p
将是此类对象的地址。该对象包含的内容未指定。您可以期望vector
对象包含例如指向在堆上分配的元素数组的指针,当前大小和容量。
要获取指向基础元素的指针,请使用p.data()
。
要访问向量的特定元素,可以使用重载的operator[]
(例如p[0]
,p[3]
)。
迭代器(例如p.begin()
)也可以用作指向元素指针的抽象:
int main() {
vector<int> p;
p.push_back(1);
p.push_back(2);
p.push_back(3);
p.push_back(4);
p.push_back(5);
p.push_back(6);
cout << (*(p.begin())) << endl;
cout << (*(p.begin() + 3)) << endl;
}
使用迭代器代替原始指针的好处是,访问已在调试版本中进行了边界检查(至少在VC ++中),并且可以与其他类型的顺序容器无缝协作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。