为什么 sizeof(ar)/ sizeof(ar[0]) 在传递给函数时无法在向量上正常工作?
Why does sizeof(ar)/ sizeof(ar[0]) not work properly on a vector when passed to a function?
我试图更好地了解c ++,但遇到了这种困惑。
int simpleArraySum(const vector<int> ar) {
int n=sizeof(ar)/sizeof(ar[0]);
int sum=0;
for (int i=0; i<n; i++){
sum+=ar[i];
}
return sum;
}
当我传递 10 个元素的向量时,结果低于预期。我检查了 n=6,这与我使用 size(( 给出 n=10 时不同。我的困惑来自于代码的编写方式在 sizeof(ar(/sizeof(ar[0]( 中正常工作。
使用"sizeof技巧"从未在std::vector
上起作用。
std::vector
对象的大小是std::vector
对象本身的大小,而不是向量处理的可能数据。
如果要从std::vector
对象中获取元素数,请使用size
成员函数。
"sizeof 技巧"仅适用于实际数组,例如
int array[10];
std::cout << sizeof(array) / sizeof(array[0]) << 'n'; // Will print 10
至于你试图用你的函数解决的问题,有更好的方法来处理它。
首先,您可以使用大小进行迭代(就像现在一样(
for (size_t i = 0; i < ar.size(); ++i) sum += ar[i];
然后你可以使用迭代器进行迭代
for (auto i = ar.begin(); i != ar.end(); ++i) sum += *i;
然后你有基于范围的
for
循环for (auto value : ar) sum += value;
最后,您可以使用标准算法函数,例如
std::accumulate
int simpleArraySum(std::vector<int> const& ar) { return std::accumulate(begin(ar), end(ar), 0); }
为什么 sizeof(ar(/sizeof(ar[0]( 在向量上无法正常工作...
sizeof(ar)/ sizeof(ar[0])
是一个表达式,它为您提供数组的长度,并且仅提供数组的长度。std::vector
不是数组。std::vector
是一个类(模板(。sizeof(std::vector)
与它拥有的元素数量(即长度(完全无关。
所有类型的大小都是编译时常量。std::vector
可以包含可变数量的元素,这些元素不是编译时常量。因此,向量类型的大小不能取决于元素的数量。
。何时传递给函数?
当不传递到函数中时,它也不会起作用。
相关文章:
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 同一对象的"sizeof"的不同答案
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 为什么 sizeof 在 C++ 中给出不正确的字节数?
- sizeof(size_t) 可以小于 sizeof(int) 吗?
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 为什么 sizeof(ar)/ sizeof(ar[0]) 在传递给函数时无法在向量上正常工作?
- 为什么 MSVC _count_of实现将 0 添加到 sizeof 的结果中?
- alignas() 对 sizeof() 的影响 - 强制性的?
- 在C++中,运算符 sizeof 返回什么数据类型?
- sizeof 函数如何在带和不带位字段的结构上工作?(填充)
- s.length 和 sizeof(a) 有什么区别?
- sizeof(enum) 可以不同于 sizeof(std::underlying_type<Enum>::
- 如何将数组传递给使用 sizeof 的函数?
- sizeof(size_t) 和 sizeof(ptrdiff_t) 什么时候会有所不同?
- " sizeof "操作员在编程中真的很重要吗,尤其是在构建大型应用程序时?
- 在QScopedPointer的实现中使用sizeof
- Sizeof返回的是指针大小,而不是数组大小.有其他方法可以找到尺寸吗
- 为什么sizeof函数在这里不能正常工作
- 在 T 的静态成员中使用 sizeof(T) 的 c++ 错误