如何推导函数内部向量的大小?(向量通过指向其第一个元素的指针传递)

How to derive the size of vector inside a function? (the vector is passed by a pointer to its first element)

本文关键字:向量 第一个 元素 指针 内部 函数 何推导      更新时间:2023-10-16

我想知道,有没有办法通过传递第一个元素的地址来推导出传递给函数的向量的大小?

场景如下:

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类实例中,该实例实际上并不靠近向量的元素。在您的情况下,vecmain 的堆栈帧中,而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 * ,唯一有意义的操作是您可以在指针上执行的双精度操作。