小编dal*_*jaz的帖子

什么是更好的:保留矢量容量,预分配大小或推回循环?

我有一个函数,它将一个指向char数组和段大小的指针作为输入参数,并调用另一个需要a的函数std::array<std::string>.我们的想法是将输入字符数组"划分"为相等的部分,并形成字符串数组.

输入字符数组格式是几个确定大小的小型数组(或字符串),连接到togeather.这些都不是假定为零终止的,尽管它们可能是.段大小5和元素数量10的示例:

char k[] = "1234\0001234\0001234\0001234\0001234\0001234\0001234\0001234\0001234\0001234\000";
char m[] = "1234\00067890987654321\000234567809876\0005432\000\000\0003456789098";
char n[] = "12345678909876543211234567890987654321123456789098";
Run Code Online (Sandbox Code Playgroud)

所有char数组的长度为51(segment*elements + 1).我的目标是使函数有效地使用资源,最重要的是执行时间.

由于有许多方法可以给猫皮肤,我有两种(或三种)方法可以解决这个问题,问题是,哪种"更好"?我的意思是更快,更少资源浪费.我不是专业人士,请耐心等待我.

在这里,values预先分配,然后为每个字符串分配一个值.

void myfnc_1(void *a_src, uint32_t a_segment) {
    // a_segment = 5 for example
    size_t nSize = GetSize(); // another method, gets 10
    std::vector<std::string> values(nSize);
    char* v = a_src; // take k, n or m for example

    for (size_t i = 0; i < nSize; ++i) {
        values.at(i).assign(v, a_segment);
        v += a_segment;
    }
}
Run Code Online (Sandbox Code Playgroud)

这里,没有分配向量,但是每次迭代都添加了一个新的字符串.

void myfnc_1(void *a_src, uint32_t …
Run Code Online (Sandbox Code Playgroud)

c++ stdvector

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

标签 统计

c++ ×1

stdvector ×1