2015-07-02 7 views
3

Я пробовал:Как я могу получить размер 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' 

Casting выражение для 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 

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

+0

Что значит, вы не можете использовать unsigned int? (на самом деле это дает вам 'size_t'). –

+0

Какая ошибка у вас? –

+0

Я получаю что-то вроде этого: error C2446: '<': no ​​conversion from 'unsigned int (__thiscall std :: vector > :: *) (void) throw() const' to ' int ' – Flashpaper

ответ

11

В первых двух случаях, вы просто забыли на самом деле вызвать функцию члена (это не значение!) std::vector<int>::size так:

#include <vector> 

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

Ваш третий вызов

int size = v.size(); 

запускает предупреждение, так как не каждое возвращаемое значение этой функции (обычно 64-битное беззнаковое int) может быть представлено как 32-битный подписанный int.

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

всегда компилируются чисто и также четко указано, что ваш переход от std::vector::size_type к int было задумано.

Обратите внимание, что, если размер vector больше самого большого числа int может представлять, size будет содержать реализацию определенное значение (де-факто мусора).