相关疑难解决方法(0)

std :: vector元素是否保证是连续的?

我的问题很简单: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)

c++ standards vector

104
推荐指数
4
解决办法
4万
查看次数

向量的reserve()方法的行为

我想知道std::vector::reserve()以下情况的行为:

  1. 假设reserve(N)一个接一个地立即调用多次.早期reserve(N1)会被加起来还是被覆盖?
  2. 如果早期reserve(N1)被最新的呼叫覆盖,那么如果最新reserve(Nn)要求的插槽数量减少会怎样?
  3. 在声明vector我们是否只有push_back()X元素之后,然后我们调用reserve(N).已经有push_back()X元素会被计入N吗?
  4. 假设,如果vector有一些X推送元素,现在如果我们再增加 push_back()1个元素(X + 1),则该对象必须重新定位; 但我们还没有表演push_back().如果我们reserve()现在打电话怎么办?对象会立即重新定位吗?如果没有,那么如何保留空间?

c++ methods stdvector

6
推荐指数
2
解决办法
2352
查看次数

如何释放数组的 N 个元素的内存

与我正在修复的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;我应该如何解决这个错误?
谢谢。

c++

1
推荐指数
1
解决办法
1086
查看次数

标签 统计

c++ ×3

methods ×1

standards ×1

stdvector ×1

vector ×1