Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(C++)多维向量中的元素总数_C++_C++11_Vector - Fatal编程技术网

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

(C++)多维向量中的元素总数,c++,c++11,vector,C++,C++11,Vector,我已经了解到,检查一维向量的大小是一项简单的任务,因为人们只需要写 #include <iostream> #include <vector> int main(){ vector <int> v = {1, 2, 3, 4}; cout << v.size() << endl; cout << sizeof(v)/sizeof(int) << endl; } 正如预期的那样,输出为4

我已经了解到,检查一维向量的大小是一项简单的任务,因为人们只需要写

#include <iostream>
#include <vector>

int main(){
    vector <int> v = {1, 2, 3, 4};
    cout << v.size() << endl;
    cout << sizeof(v)/sizeof(int) << endl;
}
正如预期的那样,输出为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;
}
这一次,输出是3,而不是预期的5。有人能解释一下为什么会发生这种情况,以及如何修改代码以便生成正确的输出吗?

在第二个示例中,v是向量的向量,因此v.size报告3个子向量,而不是整数的数量

std::vector::size不会递归,您必须自己执行此操作:

标准::大小总和=0; 用于自动输入(&i:v){ 总和+=i.尺寸; } //回报金额;
可以编写一个helper函数来递归计算多维向量的大小

顺便说一句:sizeof给出了类型的对象表示的大小,这是在编译时确定的。因此,sizeofv返回的值与v的元素数无关,v的元素数可能不是您想要的。

sizeof的向量实际上并不像您想象的那样。有趣的事实:你的sizeofv总是给你相同的值,无论它是完全空的还是包含的整数比这个宇宙中的原子还要多。正如预期的那样,输出是4-。如您所见,sizeof行的输出为6。
template <typename T>
size_t get_size(const std::vector<T>& v) {
    return v.size();
}
template <typename T>
size_t get_size(const std::vector<std::vector<T>>& v) {
    size_t size = 0;
    for (const auto& vv : v) {
        size += get_size(vv); // get the size recursively
    }
    return size;
}