Permalänk
Medlem

adjacent_find c++

Hej!

sitter med en sorterad talserige och ska hitta de första och sista paret om de finns några par ens
och får fel meddelande "segmentation fault (core dumped)" när jag kör program, och kan inte förstå varför.
Koden ser iaf ut så här:

for(it=v.begin(); it!=v.end(); it++) { it2=adjacent_find(++it2, v.end(), comp); } och funktionen ser ut så här: using namespace std; bool comp(int &i, int &j) { return (i==j); }

kan någon säga var för det blir fel? och helst ge en förklaring!

Tack så mycket i förhand!

Visa signatur

Смерть -это решение всех проблем. Нет человека - нет проблемы
Comp1: Ubuntu 16.04 Comp2: Arch Linux
Comp3: Ubuntu Server 16.04 Comp4: Centos 6.5
Comp5: Linux mint 16 Comp6: Raspberry pi (olika OS hela tiden)
Phone: Motorola Google Nexus 6

Permalänk
Medlem

Hej,
du går lite över ån efter vatten
kolla in: http://www.cplusplus.com/reference/algorithm/adjacent_find/
det räcker således med:

it = adjacent_find (myvector.begin(), myvector.end()); if (it!=myvector.end()) cout << "the first consecutive repeated elements are: " << *it << endl;

Visa signatur

weeeee

Permalänk
Medlem

Jag vet inte varför din kod segfaultar, förmodligen är det p.g.a. av någon del av koden som du inte visat. Logiken känns lite konstig dock, du behöver inte stega igenom varje element i vectorn, adjacent_find stegar ju själv. mountes kod funkar för att hitta det första paret. För att hitta det sista paret kan du använda vector::rbegin och vector::rend för att söka från slutet istället.

Permalänk
Medlem

perost, man behöver inte göra några stora ändringar.
Se följande t.ex. (i stora drag bör det fungera, har ingen kompilator i närheten...

vector<int>::iterator it; it = myvector.begin(); for(;;) { it = adjacent_find (it, myvector.end()); if (it!=myvector.end()) cout << "the first consecutive repeated elements are: " << *it << endl; else break; ++it; }

Visa signatur

weeeee

Permalänk
Medlem
Skrivet av mounte:

perost, man behöver inte göra några stora ändringar.
Se följande t.ex. (i stora drag bör det fungera, har ingen kompilator i närheten...

Din kod hittar alla par i vectorn, men uppgiften var endast att hitta första och sista paret. Så det finns ingen anledning att söka igenom hela vectorn bara för det.

Permalänk
Medlem

ahhhh tack perost ibland läser jag på tok för dåligt/hastigt.

Visa signatur

weeeee