[英]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]) );
}
編輯
謝謝大家的答復。 我忘了說我想知道是否有任何方法可以完成上述工作。 閱讀您的答案后,我認為沒有這種方法。 感謝您的幫助!
您沒有傳遞矢量,而是傳遞了雙精度。 您需要傳遞矢量,然后才能使用它的長度。 我也希望在這里使用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());
}
不,這是不可能的。 該信息通常存儲在vector
類實例中,該實例實際上不在向量的元素附近。 在您的情況下, vec
在main
的堆棧框架中,而vec[0]
在堆中的某個位置。 vec
堆棧變量具有有關元素位置的指針信息, 反之亦然 。
實際上,如果您在調用foo
之前先在main
調用vec.pop_back()
,那么通過foo
參數可以訪問的所有內存(可能)是相同的,但是大小會有所不同。
當您將指針傳遞給向量的元素時,您已經擦除了與向量本身關聯的所有信息。 您所擁有的只是一個指針,在您的情況下是一個指向double的指針。 到那時,您只需要使用double *
,那么唯一有意義的操作就是您可以在指向double的指針上進行的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.