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

时间:2019-01-14 04:00:57

标签: c++

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

这是场景:

<main>
<div class='item l1'><a href='#/'>ONE</a></div>
<div class='item l2'><a href='#/'>TWO</a></div>
<div class='item l3'><a href='#/'>THREE</a></div>


<figure>
  <img src='https://cdn1.wine-searcher.net/images/labels/27/50/finca-bacara-time-waits-for-no-one-jumilla-spain-11002750t.jpg' class='one'>
  <img src='https://static1.squarespace.com/static/53221edce4b0ff54eacdae95/53253064e4b0ba32c23fc68c/53253085e4b05db45c4abdda/1395030141683/Table+for+Two15X30.jpg?format=100w' class='two'>
  <img src='http://th06.deviantart.net/fs71/200H/i/2013/037/1/9/under_the_three_moons_by_timidemerald-d5u03xr.jpg' class='three'>
</figure>
</main>

编辑

谢谢大家的回复。我忘了说我想知道是否有任何方法可以完成上述工作。阅读您的答案后,我认为没有这种方法。感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

您没有传递矢量,而是传递了双精度。您需要传递矢量,然后才能使用它的长度。我也希望在这里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());
}

答案 1 :(得分:2)

否,这是不可能的。该信息通常存储在vector类实例中,该实例实际上并不位于向量的元素附近。在您的情况下,vecmain的堆栈帧中,而vec[0]在堆中的某个位置。 vec堆栈变量具有有关元素位置的指针信息,但反之亦然

实际上,如果您在调用vec.pop_back()之前先在main中调用foo,那么通过foo的参数可访问的所有内存将(可能)为相同,但大小会有所不同。

答案 2 :(得分:1)

当您将指针传递给向量的元素时,您已擦除了与向量本身关联的所有信息。您所拥有的只是一个指针,在您的情况下是一个指向double的指针。到那时,您只需要使用double *,唯一有意义的操作就是您可以在指向double的指针上进行的操作。