是否可以像数组一样处理 std::vector
is it portable to treat std::vector like array
我见过我的团队中有人写这样的代码。我个人认为这是不可移植的,因为矢量可以以完全不同的方式实现。我说的对吗?
vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
int* b = &a[0];
std::cout<< *(b +1); // this will print 2
该代码是正确的。存储在std::vector
中的元素保证从 C++03 开始连续存储。
这是当前标准草案N3797
(23.3.6.1)C++的相关部分:
向量是支持随机访问的序列容器 迭代器。此外,它还支持(摊销)恒定时间插入 并在最后擦除操作;在中间插入和擦除 线性时间。存储管理是自动处理的,但提示 可以给予以提高效率。向量的元素是 连续存储,这意味着如果 v 是一个向量,其中 T 是一些 除 bool 以外的类型,则服从恒等
&v[n] == &v[0] + n
对于所有0 <= n < v.size()
.
无论向
量以何种方式实现,标准都保证某些事情保持一致。std::vector
始终连续存储在内存中,这就是为什么它可以与随机访问迭代器一起使用的原因。
相关文章:
- 警告处理为错误这里有什么问题
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用流处理接收到的数据
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 基于多个条件处理地图中的所有元素
- 如何用数字处理log(0)
- SSL上的`curl_easy_send`和`curl_asy_recv`:如何处理`CURLE_AGAIN`
- 错误处理.将系统错误代码映射到泛型
- 从文本文件中读取时钟时间和事件时间并进行处理
- 在运行时处理类型擦除的数据-如何不重新发明轮子
- 为什么在C++中对链表这样做?(像堆叠一样处理它们)
- 如何像在 C++ 中处理数组一样对 .txt 文件中的字符进行寻址?
- 在Visual C++6.0 MFC中,CString是否可以像简单类型而不是类一样安全地处理
- 是否可以像数组一样处理 std::vector
- 试图像字符数组一样填充一个字符串,但它只是处理字符串中的第一个字符
- std::vector可以像数组一样处理吗?
- C++中的分段错误是否可以像在 Java 中处理 NullPointerExceptions 一样处理