我的问题很简单:std :: vector元素是否保证是连续的?在order word中,我可以使用指向std :: vector的第一个元素的指针作为C数组吗?
如果我的记忆力很好,那么C++标准就没有这样的保证.但是,如果元素不连续,那么std :: vector要求几乎不可能满足它们.
有人可以澄清一下吗?
例:
std::vector<int> values;
// ... fill up values
if( !values.empty() )
{
int *array = &values[0];
for( int i = 0; i < values.size(); ++i )
{
int v = array[i];
// do something with 'v'
}
}
Run Code Online (Sandbox Code Playgroud) 我想知道std::vector::reserve()以下情况的行为:
reserve(N)一个接一个地立即调用多次.早期reserve(N1)会被加起来还是被覆盖?reserve(N1)被最新的呼叫覆盖,那么如果最新reserve(Nn)要求的插槽数量减少会怎样?vector我们是否只有push_back()X元素之后,然后我们调用reserve(N).已经有push_back()X元素会被计入N吗?vector有一些X推送元素,现在如果我们再增加
push_back()1个元素(X + 1),则该对象必须重新定位; 但我们还没有表演push_back().如果我们reserve()现在打电话怎么办?对象会立即重新定位吗?如果没有,那么如何保留空间?与我正在修复的2004 年程序相关。前开发人员使用以下代码在析构函数中释放数组的“len”元素:
unsigned int* _data;
...
if (_data) {
int len = size();
delete (unsigned int[len]) _data;
}
Run Code Online (Sandbox Code Playgroud)
我无法用我的编译器编译这段代码。错误信息是:
错误:ISO C++ 禁止转换为数组类型 'unsigned int [(((unsigned int)(((int)l) + -0x00000000000000001)) + 1)]'
一定有他不使用的原因delete _data;我应该如何解决这个错误?
谢谢。