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ź.
Prawdopodobnie tego nie potrzebujesz, więc mamy do czynienia z problemem XY. Ale:
auto it = lower_bound(...);
T* ptr = &*it;
</del>
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;
Nie, przecież chcesz wskaźnik do elementu. Iterator też jest do elementu.
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;
}
}
Jak to vector to wystarczy zastosować odejmowanie: auto dist = it - vec.begin();
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 :)
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
.