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

std :: vector resize算法

如何解决《std::vectorresize算法》经验,为你挑选了1个好方法。

我实际上是在尝试实现std :: vector的简单副本.在我的测试期间,通过与原始数据进行比较来查看我的数据是否一致,我发现了一些东西.

std::vector *v = new std::vector(2);
std::string str1("Hello");
std::string str2("World");

v->push_back(str1);
v->push_back(str2);

v->resize(5);

for (std::vector::const_iterator it = v->begin(); it != v->end(); it++)
{
    std::cout << "/" << (*it) << "/" << std::endl;
}

这是结果:

//
//
/Hello/
/World/
//

有人可以解释一下为什么resize不会追加std :: string()这样:

/Hello/
/World/
//
//
//

背后的算法是什么?



1> Kiril Kirov..:

关键在这里:

std::vector *v = new std::vector(2);

这将创建一个包含2个元素的向量,这些元素是默认构造的(意思是 - 两个空字符串).然后你push_back HelloWorld.现在你有4个元素.然后resize( 5 )只添加一个元素(也是默认构造的).

我想你想操纵/增加容量?你需要std::vector::reserve改为.


您应该创建一个空向量,然后使用push_backs来查看您期望的行为.或者只是使用operator[]而不是两个push_back.


是否有一个非常好的理由在堆上创建向量,而不是在堆栈上?你(几乎?)总是应该避免这种情况.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有