相关疑难解决方法(0)

是标准定义的std :: array的大小

在C++ 11 std::array中定义的连续存储和性能并不比数组差,但我不能确定标准的各种要求是否意味着std :: array具有与普通数据相同的大小和内存布局阵列.那是你可以指望的sizeof(std::array<int,N>) == sizeof(int)*N还是具体的实施?

特别是,这保证按照您期望的方式工作:

std::vector< std::array<int, N> > x(M);
typedef (*ArrayPointer)[N];
ArrayPointer y = (ArrayPointer) &x[0][0];
// use y like normal multidimensional array
Run Code Online (Sandbox Code Playgroud)

它适用于我尝试过的两个编译器(GNU和Intel).此外,我能找到的所有第三方文档(如下所示)都表明std :: array与普通数组一样具有内存效率,它与连续需求相结合意味着它必须具有相同的内存布局.但是我在标准中找不到这个要求.

c++ stl language-lawyer c++11

36
推荐指数
1
解决办法
3290
查看次数

基于范围的多维数组

我的嵌入式系统有一个支持C++ 11的g ++版本,所以我一直在清理代码

for( uint16_t* p = array; p < (&array)[1]; ++p ) {
    *p = fill_value;
}
Run Code Online (Sandbox Code Playgroud)

for( uint16_t& r : array ) {
    r = fill_value;
}
Run Code Online (Sandbox Code Playgroud)

这是更具有可读性.

是否存在基于范围的for循环,它可以在所有元素上运行array2[m][n]

旧版本是

for( int16_t* p = array2[0]; p < (&array2)[1][0]; ++p ) {
    *p = fill_value;
}
Run Code Online (Sandbox Code Playgroud)

我不希望嵌套循环,除非保证编译器将它们展平.

(FWIW,编译器是TI Code Composer Studio 6.0.0附带的GNU 4.7.4 Linaro g ++ ARM交叉编译器)

c++ arrays foreach for-loop c++11

17
推荐指数
2
解决办法
8160
查看次数

标签 统计

c++ ×2

c++11 ×2

arrays ×1

for-loop ×1

foreach ×1

language-lawyer ×1

stl ×1