相关疑难解决方法(0)

为什么越界指针算术未定义的行为?

以下示例来自Wikipedia.

int arr[4] = {0, 1, 2, 3};
int* p = arr + 5;  // undefined behavior
Run Code Online (Sandbox Code Playgroud)

如果我从不取消引用p,那么为什么arr + 5单独的未定义行为?我希望指针表现为整数 - 除了取消引用时,指针的值被视为内存地址.

c++ undefined-behavior

27
推荐指数
4
解决办法
5401
查看次数

C++ Vector初始容量

我有一些使用数千个向量的代码,每个向量只有4个条目,所以我想将每个向量的初始大小设置为4,这样我就可以通过不保留未使用的内存来优化内存使用.

我试过保留方法:

vector<Foo> bar;
bar.reserve(10);
Run Code Online (Sandbox Code Playgroud)

但似乎它扩展并且不缩小,似乎也没有构造函数创建具有指定容量的向量.

还有2个奖励问题:

什么是默认初始容量

我可以创建具有特定容量的向量吗?

c++ vector

13
推荐指数
2
解决办法
1万
查看次数

保留后使用std :: vector :: data

我有一个std::vector在我称之为reserve一个较大的值.然后我检索data().

由于迭代data然后崩溃,我想知道这是否是允许的.被reserve强制更新data已分配内存的范围是多少?

c++ vector stdvector language-lawyer

12
推荐指数
2
解决办法
1673
查看次数