c – 目前可用的std :: dynarray的任何替代品? - 代码日志

c – 目前可用的std :: dynarray的任何替代品?

C 11给了我们很棒的std :: array,它需要在编译时知道大小:

std::array<int, 3> myarray = {1, 2, 3};

现在,我碰巧有一些旧的短*缓冲区来包装,它的大小将会被知道(当然这也是在运行时)。

C 14将定义std :: dynarray来覆盖这种情况,但是在GCC 4.7和Clang 3.2中,动力阵列还不可用。

那么,有没有人知道一个与std :: array相当的容器(在效率方面),但是不需要在编译时指定大小?我怀疑Boost有为我准备的东西,虽然我找不到任何东西。

你可以(ab)使用std :: valarray< short>。

int main() {
    short* raw_array = (short*) malloc(12 * sizeof(short));
    size_t length = 12;
    for (size_t i = 0; i < length; ++ i) {
        raw_array[i] = (short) i;
    }

    // ...

    std::valarray<short> dyn_array (raw_array, length);
    for (short elem : dyn_array) {
        std::cout << elem << std::endl;
    }

    // ...

    free(raw_array);
}

valarray支持动态阵列的大部分功能,除了:

>分配器
反向迭代器
> .at()
> .data()

请注意,标准(as of n3690)不需要valarray存储是连续的,虽然没有理由不这样做:)。

(对于一些实现细节,在libstdc中,它被实现为(长度,数据)对,在libc中它被实现为(begin,end))。

http://stackoverflow.com/questions/17303902/any-alternative-to-stddynarray-presently-available

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 目前可用的std :: dynarray的任何替代品?