Questions tagged «dynamic-arrays»

7
C动态增长数组
我有一个程序可以读取游戏中实体的“原始”列表,并且我打算制作一个数组,其中包含不确定数量的实体的索引号(int),用于处理各种事物。我想避免使用过多的内存或CPU来保持此类索引... 到目前为止,我使用的一种快速而又肮脏的解决方案是在主处理函数(局部焦点)中声明具有最大游戏实体大小的数组,以及另一个用于跟踪已添加到列表中的整数的整数。这并不令人满意,因为每个列表都包含3000多个数组,虽然数量不算多,但是却感觉很浪费,因为我可能会使用6-7个列表的解决方案来实现各种功能。 我还没有找到任何C(不是C ++或C#)特定的解决方案来实现这一目标。我可以使用指针,但是我有点害怕使用它们(除非这是唯一可能的方法)。 数组不会离开局部函数范围(它们将被传递给函数,然后被丢弃),以防万一。 如果指针是唯一的解决方案,那么我该如何跟踪它们以避免泄漏?
126 c  dynamic-arrays 




10
动态分配阵列的理想增长率是多少?
C ++具有std :: vector,而Java具有ArrayList,许多其他语言都有其自己的动态分配数组形式。当动态数组空间不足时,它会重新分配到更大的区域中,并将旧值复制到新数组中。这种阵列性能的核心问题是阵列大小增长的速度。如果您总是只增长到足以容纳当前推送的大小,则最终每次都会重新分配。因此,将数组大小加倍或乘以1.5倍是有意义的。 有理想的增长因素吗?2倍?1.5倍?理想情况下,我的意思是数学上合理的,最佳的平衡性能和浪费的内存。我意识到从理论上讲,鉴于您的应用程序可能具有任何潜在的推送分布,因此这在某种程度上取决于应用程序。但是我很想知道是否有一个值“通常”是最佳的,或者在某些严格的约束条件下被认为是最佳的。 我听说某处有一篇论文,但是我一直找不到。

3
递增指向0大小的动态数组的指针是否未定义?
AFAIK,尽管我们无法创建大小为0的静态内存数组,但是我们可以使用动态数组来做到这一点: int a[0]{}; // Compile-time error int* p = new int[0]; // Is well-defined 如我所读,p行为就像一个过去的元素。我可以打印p指向的地址。 if(p) cout << p << endl; 尽管我确定我们不能像使用迭代器(过去元素)那样取消引用该指针(过去元素),但是我不确定是否要增加该指针p?是否像迭代器一样具有未定义的行为(UB)? p++; // UB?

1
自C ++ 20起允许在分配的存储上使用指针算术吗?
在C ++ 20标准中,据说数组类型是隐式生存期类型。 这是否意味着可以隐式创建非隐式生命周期类型的数组?这样的数组的隐式创建会不会导致创建数组的元素? 考虑这种情况: //implicit creation of an array of std::string //but not the std::string elements: void * ptr = operator new(sizeof (std::string) * 10); //use launder to get a "pointer to object" (which object?) std::string * sptr = std::launder(static_cast<std::string*>(ptr)); //pointer arithmetic on not created array elements well defined? …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.