为什么 C++ 地址中的矢量无法通过原始指针访问
why vector in c++ address cannot access by raw pointer
>当我每次写作时使用向量时
vector<int>::iterator itr;
但是当我想使用原始指针访问地址时,例如
int *ptr=v.begin();
它不打印任何内容并显示错误 如果我想用迭代器和原始指针变量打印地址 它不打印任何地址 但是如果我们想像这样使用 V[i] 访问它工作正常 我的问题是为什么这个原始指针不保存这个容器初学者地址
据我了解,您想要指向向量中第一个元素的指针:
vector<int>::iterator itr = v.begin();
// if(itr != v.end()) // should be involved
int* ptr = &*itr;
或:
// if(v.size()) // should be involved
int* ptr = &v[0]; // all C++ versions
int* ptr = v.data(); // C++11 and later
int *ptr=v.begin();
您通常不能这样做。std::vector::begin
返回一个std::vector::iterator
,不能保证可转换为int*
。即使在碰巧可兑换的情况下,也无法保证转换后的价值是多少。
如果你想要的是向量的第一个元素的地址,你可以使用data
成员函数:
int *ptr = v.data();
相关文章:
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 用于访问容器<T>数据成员的正确 API
- 访问者访问变体并返回不同类型时出错
- 尝试通过多个向量访问变量时,向量下标超出范围
- 无法访问嵌套类.类的使用无效
- 为什么 C++ 地址中的矢量无法通过原始指针访问
- 如果包含引用成员的类中缺少原始变量,为什么它仍然可以访问?
- 访问"std::vector"的保留但未调整大小的内存作为原始内存是否安全?
- MEX C++原始数据访问
- 好的设计?用于分配的智能指针与用于访问的原始指针相结合
- 访问原始指针的INT矢量元素
- 确实通过铸造访问原始记忆会违反严格的混叠
- 我是否可以使用用户定义的转换将原始指针访问替换为通过类访问
- 使用 ADO 将原始文件数据插入访问表的 BLOB("OLE 对象")字段
- 如何使用Windows内置的mp3解码器访问原始解码音频数据?
- 拥有一个具有原始指针访问器的unique_ptr成员是不好的做法吗?
- C++ 为什么对象的副本不允许访问原始对象的私有变量?
- 通过shared_ptr访问是否比原始指针更污染缓存行