相关疑难解决方法(0)

std :: vector :: resize()与std :: vector :: reserve()

这篇文章的评论部分中有一个关于使用std::vector::reserve()vs.的帖子std::vector::resize().

这是原始代码:

void MyClass::my_method()
{
    my_member.reserve(n_dim);
    for(int k = 0 ; k < n_dim ; k++ )
         my_member[k] = k ;
}
Run Code Online (Sandbox Code Playgroud)

我相信要写出元素vector,正确的做法是打电话std::vector::resize(),而不是std::vector::reserve().

实际上,以下测试代码在VS2010 SP1的调试版本中"崩溃":

#include <vector>

using namespace std;

int main()
{
    vector<int> v;
    v.reserve(10);
    v[5] = 2;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我是对的,还是我错了?并且VS2010 SP1是对的,还是错了?

c++ stl vector

71
推荐指数
3
解决办法
5万
查看次数

std :: vector reserve()和push_back()比resize()和数组索引更快,为什么?

我正在对一段代码进行快速性能测试

void ConvertToFloat( const std::vector< short >& audioBlock, 
                     std::vector< float >& out )
{
    const float rcpShortMax = 1.0f / (float)SHRT_MAX;
    out.resize( audioBlock.size() );
    for( size_t i = 0; i < audioBlock.size(); i++ )
    {
        out[i]  = (float)audioBlock[i] * rcpShortMax;
    }
}
Run Code Online (Sandbox Code Playgroud)

我很高兴原来非常天真的实现速度超过1毫秒来处理65536个音频样本.

然而,只是为了好玩,我尝试了以下

void ConvertToFloat( const std::vector< short >& audioBlock, 
                     std::vector< float >& out )
{
    const float rcpShortMax = 1.0f / (float)SHRT_MAX;
    out.reserve( audioBlock.size() );
    for( size_t i = 0; i < audioBlock.size(); i++ )
    {
        out.push_back( (float)audioBlock[i] …
Run Code Online (Sandbox Code Playgroud)

c++ optimization stl vector

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

STL vector reserve()和copy()

问候,

我试图使用以下2个缩写的代码行(从下面的完整测试应用程序)执行从一个向量(vec1)到另一个向量(vec2)的副本:

vec2.reserve( vec1.size() );
copy(vec1.begin(), vec1.end(), vec2.begin());
Run Code Online (Sandbox Code Playgroud)

虽然对vec2的调用设置了向量vec2的容量,但是将数据复制到vec2似乎没有填写从vec1到vec2的值.

用push_back()调用替换copy()函数按预期工作.

我在这里错过了什么?

谢谢你的帮助.然后是结果输出的vectest.cpp测试程序.

编译器:关于cygwin的gcc 3.4.4.

纳特

/**
 * vectest.cpp
 */

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector<int> vec1;
    vector<int> vec2;

    vec1.push_back(1);
    vec1.push_back(2);
    vec1.push_back(3);
    vec1.push_back(4);
    vec1.push_back(5);
    vec1.push_back(6);
    vec1.push_back(7);

    vec2.reserve( vec1.size() );
    copy(vec1.begin(), vec1.end(), vec2.begin());

    cout << "vec1.size()     = " << vec1.size() << endl;
    cout << "vec1.capacity() = " << vec1.capacity() << endl;

    cout << "vec1: ";
    for( vector<int>::const_iterator iter = vec1.begin(); iter < vec1.end(); ++iter ) {
        cout …
Run Code Online (Sandbox Code Playgroud)

c++ stl vector stl-algorithm

18
推荐指数
3
解决办法
2万
查看次数

将元素添加到c ++向量的以下方法之间的区别是什么?

Snippet1:以下代码段打印出0 1但返回一个空向量.

vector<int> trial() {
    vector<int> ret;
    ret.reserve(2);
    ret[0] = 0;
    ret[1] = 1;
    cout << ret[0] << " " << ret[1] << "\n";
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

代码段2:以下代码段打印出0 1并返回包含{0,1}的向量.

vector<int> trial() {
    vector<int> ret;
    ret.push_back(0);
    ret.push_back(1);
    cout << ret[0] << " " << ret[1] << "\n";
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

为什么代码片段1不像代码片段2那样工作.如果我保留内存并向向量添加值.

c++ push-back stdvector c++11

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

标签 统计

c++ ×4

stl ×3

vector ×3

c++11 ×1

optimization ×1

push-back ×1

stdvector ×1

stl-algorithm ×1