如何将std :: vector的大小作为int?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将std :: vector的大小作为int?相关的知识,希望对你有一定的参考价值。

我试过了:

#include <vector>

int main () {
    std::vector<int> v;
    int size = v.size;
}

但得到了错误:

cannot convert 'std::vector<int>::size' from type 'std::vector<int>::size_type (std::vector<int>::)() const noexcept' {aka 'long unsigned int (std::vector<int>::)() const noexcept'} to type 'int'

将表达式转换为int,如下所示:

#include <vector>

int main () {
    std::vector<int> v;
    int size = (int)v.size;
}

也会产生错误:

error: invalid use of member function 'std::vector<_Tp, _Alloc>::size_type std::vector<_Tp, _Alloc>::size() const [with _Tp = int; _Alloc = std::allocator<int>; std::vector<_Tp, _Alloc>::size_type = long unsigned int]' (did you forget the '()' ?)

最后我试过:

#include <vector>

int main () {
    std::vector<int> v;
    int size = v.size();
}

这给了我:

warning: implicit conversion loses integer precision

我怎样才能解决这个问题?

答案

在前两种情况下,你只是忘了实际调用成员函数(!,它不是一个值)std::vector<int>::size像这样:

#include <vector>

int main () {
    std::vector<int> v;
    auto size = v.size();
}

你的第三个电话

int size = v.size();

触发警告,因为并非该函数的每个返回值(通常是64位无符号整数)都可以表示为32位有符号整数。

int size = static_cast<int>(v.size());

总是会干净地编译,并明确指出你从std::vector::size_typeint的转换是有意的。

请注意,如果vector的大小大于int可以表示的最大数字,则size将包含实现定义(事实上的垃圾)值。

以上是关于如何将std :: vector的大小作为int?的主要内容,如果未能解决你的问题,请参考以下文章

在类构造函数中设置 std::vector

将 std::vector<int> 的每个值重置为 0 的最快方法

是否有直接获取 std::vector 元素大小的函数?

如何将 std::vector<thrust::device_vector<int>> 转换为 int**?

使用初始化列表作为值时插入 std::list<std::vector<int>> 失败?

如何调整 Eigen::MatrixXd 的 std::vector 的大小