Jak uzyskać adres elementu w tablicy z iteratora ?

0

Dzień dobry !
Mam funkcje lower_bound() która zwraca iterator do danego elementu np w vector. Czy jest możliwość aby dowiedzieć się do jakiego adresu w tablicy się on odnosi ? . Od razu zaznaczam że jestem początkujący w c++.
Np iterator wskazuje na 580 które jest 5 elementem vectora i potrzebuje informacje o tym zamiast adresu pamięci (wskaźnika)
Z góry dziękuje za odpowiedź.

0

Prawdopodobnie tego nie potrzebujesz, więc mamy do czynienia z problemem XY. Ale:

auto it = lower_bound(...);
T* ptr = &*it;
</del>
0
kq napisał(a):

Prawdopodobnie tego nie potrzebujesz, więc mamy do czynienia z problemem XY. Ale:

auto it = lower_bound(...);
T* ptr = &*it;

Czyli u mnie ma to tak wyglądać : ?

 auto it = lower_bound(mojwektor.begin(),mojwektor.end(),liczbakotrejszzukam);
mojwektor* ptr = &*it;
0

Nie, przecież chcesz wskaźnik do elementu. Iterator też jest do elementu.

1

Być może chodzi ci o std::distance

#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5, 6};
    auto it = std::find(std::begin(vec), std::end(vec), 3);
    if(it != std::end(vec)) {
        std::cout << std::distance(std::begin(vec), it) << std::endl;
    }
}
2

Jak to vector to wystarczy zastosować odejmowanie: auto dist = it - vec.begin();

0
kq napisał(a):

Jak to vector to wystarczy zastosować odejmowanie: auto dist = it - vec.begin();

Bardzo dziękuje za pomoc , program działa. A co do rozmyśleń na temat przenoszenia kodu na klasę array to wektor mi wystarcza , więc tego robić nie będe
Jeszcze raz dziękuję za poświęcony czas :)

2

Mi to pachnie problemem XY.
Pobieranie wskaźnika do elementu std::vector stwarza duże ryzyko "Undefined Behavior", jeśli czas użycia wskaźnika przekroczy gwarancję niezmienności std::vector.

1 użytkowników online, w tym zalogowanych: 0, gości: 1