Hoe krijg ik de grootte van een std::vector als een int?

Ik heb het geprobeerd:

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

maar kreeg de fout:

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'

De uitdrukking casten naar intals volgt:

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

levert ook een fout op:

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

Laatste poging:

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

die me gaf:

warning: implicit conversion loses integer precision

Hoe kan ik dit oplossen?


Antwoord 1, autoriteit 100%

In de eerste twee gevallen bent u gewoon vergeten de lidfunctie aan te roepen (!, het is geen waarde) std::vector<int>::sizeals volgt:

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

Uw derde oproep

int size = v.size();

triggert een waarschuwing, omdat niet elke geretourneerde waarde van die functie (meestal een 64-bits niet-ondertekende int) kan worden weergegeven als een 32-bits ondertekende int.

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

zou altijd netjes compileren en vermeldt ook expliciet dat uw conversie van std::vector::size_typenaar intbedoeld was.

Merk op dat als de grootte van de vectorgroter is dan het grootste getal dat een intkan vertegenwoordigen, sizeeen implementatie zal bevatten die is gedefinieerd ( de facto vuilnis) waarde.

Other episodes