0

Как получить размер std::vector в формате int?

20

Я попробовал следующий код:

#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

Как я могу исправить эту проблему?

2 ответ(ов)

0

В первых двух случаях вы просто забыли фактически вызвать член-функцию (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_type в int было намеренным.

Отметьте, что если размер вектора превышает максимальное значение, которое может представить int, то size будет содержать неопределённое (по сути, мусорное) значение.

0

Просто 😃 Используйте следующий код вместо вашего:

auto size = v.size();
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь