通常,我呼吁reserve在std::vector构建后立即.这通常不会导致std::vector现有的堆分配被销毁并被替换为新的堆分配吗?有没有办法在构建时保留内存而不是分配堆空间然后立即销毁它?或者是否有一个实施技巧,std::vector以确保这不是一个问题?
可用的构造函数似乎只能用于填充std::vectorwith值,而不是显式保留空间.
我正在使用一些代码,通过将其地址与描述数据std::vector范围的地址进行比较,检查是否在恒定时间内包含给定元素。vector然而我怀疑,虽然它有效,但它依赖于未定义的行为。如果该元素不包含在 中,vector则不允许进行指针比较。
bool contains(const std::vector<T>& v, const T& a) {
return (v.data() <= &a) && (&a < v.data() + v.size());
}
Run Code Online (Sandbox Code Playgroud)
我相信这是未定义的行为吗?如果是这样,有没有办法在不大幅改变代码时间复杂度的情况下做同样的事情?