• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed iterator w środku stringa

VPS Starter Arubacloud
0 głosów
425 wizyt
pytanie zadane 23 października 2019 w C i C++ przez niezalogowany
zamknięte 13 listopada 2019

Referencja czy wskaźnik? Bo podobno referencja?(Zawsze mnie to drażniło że nie nie rozumiem typu iteratora "auto" nie zawsze załatwia sprawę). I np chciałbym się dostać do konkretnego znaku w stringu.

to działa

 string ala ="kot,pies";
    string::iterator it =begin(ala)+ala.find(',');

ale to już nie

string::iterator it = &ala[3];

ani to

string::iterator it =&((void*)ala[3]);

ani to

string::iterator it =&((void*)&ala[3]);

edit:: Właśnie w takich przypadkach można załamać ręce

  string s = {"1,2,3"};
   
    string::iterator itb=begin(s);
    string::iterator ite=find(it1b,end(s),',');
    string temp(it1b,it1e);
    cout <<temp;

    vector <int> v = {1,2,3};
    vector <int>::iterator itvb=begin(v);
    vector <int>::iterator itve=find(itvb,end(v),2);
    vector <int> v2(itvb,itve);

stringstream 10 min, a stl można i dzień stracić i nic, a większość algorytmów opiera się na iteratorach. Jako kontenery vector, map, itd.. są super. Ale iteratory ?

komentarz zamknięcia: rozwiązane
komentarz 23 października 2019 przez mokrowski Mędrzec (155,460 p.)
A masz pytanie czy chcesz się komuś "wypłakać na oprawcę iterator"?;)
komentarz 23 października 2019 przez niezalogowany

1) pytanie string::iterator it  referencja wskaźnik jak to inaczej za implementować  w takim stylu &((void*)&ala[3]) ;

2)

Właśnie w takich przypadkach można załamać ręce

co jest w tej części ze stringiem nie tak. Z vectorem to sobie poradzę. Kiedyś bardzo dużo czasu straciłem walcząc by string robił to samo co vector i nie udało się mimo iż powinno być to samo co vector<char>

komentarz 25 października 2019 przez niezalogowany

@mokrowski,

W sumie to, rzeczywiście chciałem się wypłakać na oprawce operator. Bo ja do niego z miłością a on mi ciągle psikusy płata. I muszę przepraszać for(auto &x..).

Ale nie mam możliwości, z nikim podyskutować o C++, więc zaśmiecam forum. Ale jak C++, znowu stanie się, tylko hobby a nie nadzieją na cokolwiek. To nie będzie śmiecenia, tylko dłubanie w kodzie dla relaksu, bo wtedy wszystko jedno czy działa czy nie działa ważne, że czas zmarnowany.

1 odpowiedź

0 głosów
odpowiedź 23 października 2019 przez mokrowski Mędrzec (155,460 p.)
wybrane 23 października 2019
 
Najlepsza

Albo stosujesz iterator, albo wskaźnik. Iterator opakowuje dostęp do danych tak by nie robić tego w surowy sposób (czyli dostając się bezpośrednio do pamięci). Równocześnie iterator ma semantykę wskaźnika (czyli zachowuje się jak wskaźnik). Można go np. (to niekompletne operacje) inkrementować, wyłuskać z użyciem *, sprawdzić wartość porównując z innym iteratorem itp.

Jeśli chcesz uzyskać dostęp do surowych danych i wiesz co robisz, każdy kontener posiada atrybut .data. To jest jego pamięć w której przechowuje surowe dane. Nie radzę wykonywać takich operacji...

Równoważnikiem iteratrora dla kolekcji (np. vector, string), z całą pewnością nie będzie kombinacja wskaźnika czy referencji. Kolekcje oddają dane poprzez zaimplementowane iteratory i operatory. Tak naprawdę nie wiesz (i masz nie wiedzieć) jak te dane poukładane są w pamięci i co dana kolekcja robi. Ważne że robi to wydajnie :)

Dla trywialnej tablicy, znanej jeszcze z C, iteratorem jest po prostu wskaźnik. Co do niej można powiedzieć wskaźnik == iterator.

Ogólnie... co chcesz uzyskać stosując tak karkołomny dostęp do danych jak &((void*)&ala[3]) bo ja (przepraszam) nie widzę w tym sensu. Proponuję byś opisał przypadki/działanie jakie chcesz uzyskać a wtedy będzie można coś zaradzić. Na pełne pokazanie iteratorów w działaniu, nie ma tu miejsca.

komentarz 23 października 2019 przez niezalogowany
edycja 23 października 2019
ok Dzięki.

Podobne pytania

0 głosów
2 odpowiedzi 257 wizyt
pytanie zadane 23 listopada 2019 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 100 wizyt
pytanie zadane 12 sierpnia 2019 w C i C++ przez niezalogowany
0 głosów
2 odpowiedzi 276 wizyt
pytanie zadane 15 lipca 2019 w C i C++ przez niezalogowany

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...