如何推导函数内部向量的大小?(向量通过指向其第一个元素的指针传递)
How to derive the size of vector inside a function? (the vector is passed by a pointer to its first element)
我想知道,有没有办法通过传递第一个元素的地址来推导出传递给函数的向量的大小?
场景如下:
void foo (double const *vec) {
// Want the size of vec here in foo
}
int main () {
std::vector<double> vec {1., 2., 3.};
foo( &(vec[0]) );
}
编辑
谢谢大家的回复。我忘了说我想知道是否有任何方法可以完成上述工作。看完你的回答,我认为没有这样的方法。感谢您的帮助!
不,这是不可能的。该信息通常存储在vector
类实例中,该实例实际上并不靠近向量的元素。在您的情况下,vec
在 main
的堆栈帧中,而vec[0]
在堆中的某个位置。vec
堆栈变量具有有关元素所在位置的指针信息,但反之则不然。
事实上,如果你在调用foo
之前在main
中调用vec.pop_back()
,则通过参数访问的所有内存foo
可能)都是相同的,但大小会有所不同。
你不是在传递一个向量,而是在传递一个双精度。您需要传递向量,然后您就可以访问它的长度。我也希望const&
在这里。
void foo (std::vector<double> const& vec) {
std::size_t length = vec.size()
}
您还可以将长度作为函数的第二个参数传递。这样。
void foo (double val, std::size_t length) {
// do stuff here.
}
int main () {
std::vector<double> vec{ 1., 2., 3. };
foo(vec[0], vec.size());
}
将指针传递给矢量的元素时,已擦除与矢量本身关联的任何信息。你所拥有的只是一个指针,在你的例子中是一个指向双精度的指针。此时,您所要做的就是 double *
,唯一有意义的操作是您可以在指针上执行的双精度操作。
相关文章:
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- std::find,返回所有找到的值的替代方法,而不仅仅是存在重复的向量的第一个值
- 如何仅读取文本文件中的第一个值
- 在C++中,如何在第一个"system()"结束后执行第二个"system()"?
- 查找不在标准中的第一个值::设置<int>最小-最大值
- C++:忽略第一个 cin.ignore 之后的输入
- 在C++中打印多个矢量的第一个值
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- C++第一个cout将不会打印
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- OpenGL:第二个VBO破坏了第一个VBO
- 如何将正则表达式向量与一个字符串匹配?
- 为什么第一个Dynamic_cast没有投射到基类?
- 从 c++ 中的字符串向量创建一个元组
- 按另一个向量对一个向量进行排序
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- C++ 为什么程序只读取第一个值
- 在我的第一个C++程序中需要一些帮助(简单)
- 为什么我的代码在第一个 if 语句处中断?
- 获取不等于特定值的向量的第一个N元素