【问题标题】:(C++) Total number of elements in a multidimensional vector [duplicate](C ++)多维向量中的元素总数[重复]
【发布时间】:2020-06-08 01:51:42
【问题描述】:

我了解到检查一维向量的大小是一件容易的事,因为人们只会写

#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。谁能解释为什么会发生这种情况,以及如何修改代码以产生正确的输出?

【问题讨论】:

  • sizeof 的向量实际上并没有像你想象的那样做。有趣的事实:您的sizeof(v)总是为您提供相同的值,无论它是完全空的还是包含的ints 比这个宇宙中的原子多。
  • 正如预期的那样,输出是 4 -- No, not here。如您所见,sizeof 行的输出为 6。

标签: c++ c++11 vector


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您可以编写一个辅助函数来递归地计算多维向量s上的大小。

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

    LIVE

    顺便说一句:sizeof 给出类型的对象表示的大小,这是在编译时确定的。所以sizeof(v)返回的和v的元素个数无关,可能不是你想要的。

    【讨论】:

      猜你喜欢
      • 2014-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 2018-09-30
      • 2017-04-19
      • 1970-01-01
      相关资源
      最近更新 更多