Как получить размер 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
Как я могу исправить эту проблему?
2 ответ(ов)
В первых двух случаях вы просто забыли фактически вызвать член-функцию (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
будет содержать неопределённое (по сути, мусорное) значение.
Просто 😃 Используйте следующий код вместо вашего:
auto size = v.size();
Разница между const int*, const int * const и int * const?
В чем разница между constexpr и const?
Что означает "const" в конце объявления функции?
Как проще всего инициализировать std::vector с жестко заданными элементами?
Влияет ли использование const на параметры функции? Почему это не сказывается на сигнатуре функции?