实现定义为使用保留向量而不调整其大小
Implementation defined to use a reserved vector without resizing it?
是否定义了使用保留向量而不调整其大小的实现?
我的意思是:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<unsigned int> foo;
foo.reserve(1024);
foo[0] = 10;
std::cout<<foo[0];
return 0;
}
在上面的例子中,我保留了大量的空间,并为该空间中的一个索引指定了一个值。然而,我没有调用push_back,它会"调整"向量的大小,并为每个元素提供一个默认值(我试图避免这种情况)。因此,在本例中,foo.size()
为0,而foo.capacity()
为1024。
那么,这是有效的代码还是定义了它的实现?就像我在给一个大小为"0"的向量赋值一样。它有效,但我不确定这是否是个好主意。。
我试图避免使用默认值的原因是,对于大型分配,我不需要它"清零"每个索引,因为我将决定何时写入。我会使用一个原始指针,但lodepng
API只接受从文件中解码的向量。
std::vector::reserve
只是保留内存,所以下一个push_back
不必分配内存。它不会改变矢量的大小。
如果你想要一个1024
元素的初始大小的向量,你可以使用构造函数来实现:
std::vector<unsigned int> foo(1024);
请注意,如果创建了一个初始大小为1024
元素的向量,那么如果执行push_back
,则添加一个元素,因此向量的大小将增加到1025
元素。
无论容器中的项类型或特定编译器上发生了什么,它都是非法的。从23.1.1/12(表68)中,我们了解到operator[]
的行为与*(a.begin() + n)
类似。由于您没有向容器中添加任何项,这与访问未定义的end()
之后的迭代器相同。
相关文章:
- 在C++中调整向量中的索引
- 将 boost::odeint 与向量类一起使用,而无需调整向量的大小
- 如何按另一个向量的方向调整一个向量?
- C++初始化列表中的向量集大小或调整大小
- std::向量迭代器和调整大小/保留的奇怪/有趣行为
- 调整向量大小并检索值,这是否正确或在任何情况下都可能导致段错误?
- 如何调整作为结构或类成员的向量的大小?
- 调整STD ::向量的大小是否可以降低其能力
- 在具有容量/调整大小的类中初始化向量
- STD ::向量如何调整其内部缓冲区大小
- 将添加的列初始化为可调整大小的 2D 向量
- C++中向量容器的大小和调整大小函数
- 如何判断 std::vector 是否调整了自身大小,以及如何解释指向向量内值的指针不再有效
- 调整OpenCV Mat向量向量的大小时出乎意料的结果
- C++有没有一种方法可以将向量调整为特定的字符
- 调整向量的大小会导致 SEG 错误
- 在c++中我应该在哪里调整向量的大小
- 如何在Eigen3中调整向量的大小
- 调整向量数组的大小
- 在不调用构造函数的情况下调整c++向量的大小