是固定向量的第一个元素的地址
Is the address of the first element of a vector fixed?
例如,如果我做这样的事情:
vector<int> myvector;
myvector.push_back(100);
int * ptr = &(myvector[0]);
myvector.clear();
myvector.push_back(10);
ptr仍然有效吗?或者它现在可能指向垃圾?
23.2.3§4规定:
a.clear()
[…]使引用a
元素的所有引用、指针和迭代器无效,并可能使过去的结束迭代器无效。
由于不存在"取消无效"这回事,在clear
之后使用ptr
会导致未定义的行为。
附带说明一下,&(myvector[0])
中的括号是不需要的。在C++中,后缀运算符总是比前缀运算符具有更高的优先级,所以编写&myvector[0]
也没问题。
它可能指向垃圾。当实例增长或收缩时,vector
会根据需要重新分配内存,因此您不能依赖地址不变。这就是为什么用于vector
的类型必须遵守STL兼容的约束,如复制能力。这也是auto_ptr
在STL容器中不安全的原因。
相关文章:
- 获取向量C++中第一个值和最后一个值的和
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 为什么有时我输入一个整数,程序将第一个输入的数字打印成十进制数?
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- 如何实现 Front() 方法以返回模板化双向链表C++的第一个元素?
- 为什么这段代码给出错误......'a'是指针到字符指针,应该存储's'的地址,因为s是指向数组的第一个元素的指针
- 为什么'std::string'中第一个元素的地址打印为整个字符串?
- 可以读/写EEPROM地址,但是只能读/写第一个存储页面
- 第一个字符串元素的地址产生意外结果
- 是一个二维数组的名称,它在C++中的第一个元素的地址
- 指向数组第一个元素的指针的地址
- 数组的地址是否等于C++中第一个元素的地址
- 是固定向量的第一个元素的地址
- C++11 中的 POD 和继承.结构的地址 == 第一个成员的地址
- 我可以将向量的第一个元素的地址直接传递给一个函数吗?该函数需要一个无符号字符作为其输入
- 我们可以说cout只打印变量的第一个地址吗
- 查找数组中给定索引的第一个和最后一个字节的地址
- 将三维指针的第一个地址转换成一维指针时出现问题