当前位置:  开发笔记 > 编程语言 > 正文

MSVC 14 STL矢量储备

如何解决《MSVC14STL矢量储备》经验,为你挑选了1个好方法。

我注意到MSVC 14 Comm上的奇怪行为(IMO).在Debug x86解决方案中.下面的代码在不包含vector :: resize时抛出异常.注意:在分配之后,可以通过传递nullptr来取消分配某些实体.

vector m_entities;

(...)

// find empty slot
u_int id = m_entities.size();
for(u_int i=0; im_id = id;
m_entities[id] = entity;

例外 调试

看起来operator []检查size()而不是capacity() - 我是对的吗?



1> Humam Helfaw..:

vector如果未初始化,则无法访问保留区域.reserve不初始化任何它只是保留(因为它被命名)一些内存不reallocatevector每次新产品pushed back

尝试运行此代码:

#include 
#include 
#include 
class my_class{
    public:
    my_class(){
        x="I am an initialized item";
    }
    std::string x;
};
int main()
{
    std::vector v(2);
    v.reserve(3);
    std::cout << v[0].x <

您可能在调试模式下编译错误(取决于您的编译器),它可能会传递并给出未定义的行为(不确定未定义的行为,请有人编辑此部分).在最好的情况下,它将与打印空字符串运行v[2].

现场演示


@Luk所以,你不知道保留如何运作.
@Luk No.` []`只能在向量的*大小*内工作,而不是在其*容量内.*容量只是准备无法访问的空间,当向量增加时,向量可以增长,因此它不需要重新分配.但容量和大小之间的"缓冲区"不是矢量内容的一部分,因此无法访问.
推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有