相关疑难解决方法(0)

C++没有告诉你动态数组的大小.但为什么?

我知道在C++中无法获得动态创建的数组的大小,例如:

int* a;
a = new int[n];
Run Code Online (Sandbox Code Playgroud)

我想知道的是:为什么?人们是否在C++规范中忘记了这一点,还是有技术原因?

信息不是存储在某个地方吗?毕竟,命令

delete[] a;
Run Code Online (Sandbox Code Playgroud)

似乎知道它必须释放多少内存,所以在我看来,delete[]有一些方法可以知道它的大小a.

c++ dynamic-arrays

61
推荐指数
3
解决办法
5408
查看次数

为什么在C++ 14中运行时大小的数组和std :: dynarray?

草案C++ 14包括运行时大小的数组和std::dynarray容器.从我所知道的,两者之间的唯一真正的区别在于std::dynarray有一个STL接口(例如begin,end,size,等),同时运行时大小的数组没有.那么为什么C++ 14需要它们呢?

我知道运行时大小的数组是核心语言的std::dynarray一部分,同时也是标准库的一部分,但是该提议std::dynarray清楚地表明作者希望编译器在许多情况下能够提供特殊支持,std::dynarray以便它可以高效尽可能地,即,与运行时大小的数组一样高效.因此,语言/库的区别似乎有点人为.

那么,为什么C++ 14需要两个运行时大小的数组std::dynarray呢?并且鉴于它std::dynarray具有更丰富的(STLified)接口,为什么不只是删除运行时大小的数组,假设std::dynarray可以以相同的运行时效率实现?

澄清

当我谈到"运行时大小的数组"时,我指的是N3639中描述的新的C++ 14核心语言特性,而不是传统的C数组或VLA或C++ 11中的任何内容.

c++ dynamic-arrays dynarray c++14

45
推荐指数
1
解决办法
9734
查看次数

基于范围的动态数组循环?

有一个基于范围的for循环,其语法如下:

for(auto& i : array)
Run Code Online (Sandbox Code Playgroud)

它适用于常量数组,但不适用于基于指针的动态数组

int *array = new int[size];
for(auto& i : array)
   cout<< i << endl;
Run Code Online (Sandbox Code Playgroud)

它给出了有关替换失败的错误和警告,例如:

错误] C:\ Users\Siegfred\Documents\C-Free\Temp\Untitled2.cpp:16:16:错误:没有匹配函数来调用'begin(int*&)'

如何在动态数组中使用这种新语法?

c++ arrays foreach dynamic-arrays c++11

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

Why do std::begin() and std::end() work with fixed arrays, but not with dynamic arrays?

I can't understand why the std::begin() function doesn't work when it is given an int * arr pointer, but it works with an int arr[] array.

This code doesn't work:

int *arr = new int[5]{ 1,2,3,4,5 };

if (find(begin(arr),end(arr),5)!=end(arr))
{
    cout << "found";
}
Run Code Online (Sandbox Code Playgroud)

This code does work:

int arr2[5] = { 1,2,3,4,5 };

if (find(begin(arr2),end(arr2),5)!=end(arr2))
{
    cout << "found";
}
Run Code Online (Sandbox Code Playgroud)

c++ iterator c++11

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

标签 统计

c++ ×4

dynamic-arrays ×3

c++11 ×2

arrays ×1

c++14 ×1

dynarray ×1

foreach ×1

iterator ×1