Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I get the size of an std::vector as an int?

I tried:

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

but got the error:

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 the expression to int like this:

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

also yields an error:

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 '()' ?) 

Last I tried:

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

which gave me:

warning: implicit conversion loses integer precision 

How can I fix this?

like image 379
Flashpaper Avatar asked Jul 02 '15 23:07

Flashpaper


People also ask

How do you get the size of a vector as an int?

To get the size of a C++ Vector, you can use size() function on the vector. size() function returns the number of elements in the vector.

How do you define the size of a vector in C++?

The C++ function std::vector::resize() changes the size of vector. If n is smaller than current size then extra elements are destroyed. If n is greater than current container size then new elements are inserted at the end of vector. If val is specified then new elements are initialed with val.

How many bytes is a std::vector?

So there is no surprise regarding std::vector. It uses 4 bytes to store each 4 byte elements.


1 Answers

In the first two cases, you simply forgot to actually call the member function (!, it's not a value) std::vector<int>::size like this:

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

Your third call

int size = v.size(); 

triggers a warning, as not every return value of that function (usually a 64 bit unsigned int) can be represented as a 32 bit signed int.

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

would always compile cleanly and also explicitly states that your conversion from std::vector::size_type to int was intended.

Note that if the size of the vector is greater than the biggest number an int can represent, size will contain an implementation defined (de facto garbage) value.

like image 97
Baum mit Augen Avatar answered Sep 27 '22 20:09

Baum mit Augen