【问题标题】:Is there a way of getting the size of an array without finding it manually? [duplicate]有没有办法在不手动查找的情况下获取数组的大小? [复制]
【发布时间】:2016-08-06 18:40:29
【问题描述】:

所以我一直以这种方式制作数组,但我发现了一个错误,可以说这是一个逐个元素复制和数组元素的循环:

int v1[] = { 3, 4, 7, 8};
int v2[sizeof(v1)];
for (auto i = 0; i < sizeof(v2); ++i)
{
  v2[i] = v1[i]
}

v2 数组不会有 4 个整数的大小,它会将它们全部相加。所以 v2 的大小是 22 而不是 4 个整数。所以我想知道是否有任何方法可以找到数组的大小,而不必去数组并手动查看有多少元素。有办法吗?谢谢。

【问题讨论】:

  • 只需将sizeof(v1)sizeof(v2) 更改为sizeof(v1)/sizeof(int)sizeof(v2)/sizeof(int)sizeof(v1)/sizeof(v1[0])sizeof(v2)/sizeof(v1[0])
  • sizeof(v1) 返回数组下内存的总字节大小,而不是 int 的计数。

标签: c++ arrays


【解决方案1】:

只需使用std::arraystd::vector

std::array<int, 4> v1 { 3, 4, 7, 8};
auto v2 = v1;

Live demo

【讨论】:

  • 谢谢,我应该总是更喜欢 std::array 而不是 c 样式数组
  • @Harrythehacker 如有疑问,是的。它在任何方面都非常出色。
  • 在 C++ 中?当然,除非您调用需要 C 样式数组的 C API。
  • @DavidHoelzer 即使这样你也可以使用data
  • @Harrythehacker 请务必勾选对您最有帮助的答案。 ;)
【解决方案2】:

虽然我同意其他人的观点,即您通常应该使用 STL 容器,但在您的情况下,您可以使用 sizeof(v1)/sizeof(int) 获取数组中元素的计数。 sizeof(v1) 将为您提供 4 整数数组的总字节数,除以 sizeof(int) 将为您提供元素数量。

【讨论】:

  • 感谢您的格式化帮助。
  • 虽然我还是推荐使用std::array,但是使用sizeof(v1)/sizeof(decltype(v1))可以稍微改进这段代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 2010-12-22
  • 2019-09-26
  • 2011-10-18
相关资源
最近更新 更多