(C++) 多维向量中元素的总数

Tel*_*ope 0 c++ vector c++11

我了解到检查一维向量的大小是一项简单的任务,因为你可以只写

#include <iostream>
#include <vector>

int main(){
    vector <int> v = {1, 2, 3, 4};
    cout << v.size() << endl;
    cout << sizeof(v)/sizeof(int) << endl;
}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,输出为 4。

但是,当我对多维向量尝试相同的方法时,结果并不是我认为正确的:

#include <iostream>
#include <vector>

int main(){
    vector <vector<int>> v = {{1, 2}, {3, 4}, {5}}; // 5 elements in total
    cout << v.size() << endl;
    cout << sizeof(v)/sizeof(int) << endl;
}
Run Code Online (Sandbox Code Playgroud)

这次,输出是 3 而不是预期的 5。有人可以解释为什么会发生这种情况,以及如何修改代码以产生正确的输出?

iBu*_*Bug 5

在您的第二个示例中,vvector<int>s的向量,因此v.size()报告 3个子向量而不是整数数。

std::vector::size() 不会递归,你必须自己做:

std::size_t sum = 0;
for (auto &&i : v) {
    sum += i.size();
}
// return sum;
Run Code Online (Sandbox Code Playgroud)