(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;
}