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

vector jako argument funkcji

Object Storage Arubacloud
+1 głos
589 wizyt
pytanie zadane 24 stycznia 2021 w C i C++ przez hicodyn Początkujący (420 p.)

Mam funkcję, która jako parametr ma przyjąć vector<punkt> (punkt to struktura stworzona przeze mnie). W trakcie działania funkcja przepisuje jeden element z tego vectora do innego, który zwraca. Jak zrobić, żeby funkcja mogła zmodyfikować zawartość vectora, który jest przekazany jako parametr funkcji? Tutaj jest kod:

std::vector<punkt> zapisCentroidow(daneWejsciowe przelaczniki,std::vector<punkt> vectorPunktow)
{
    std::vector<punkt> vectorCentroidow;
    for (int i = 0; i < przelaczniki.k; i++)
    {
        vectorCentroidow.push_back(vectorPunktow[i]);
        vectorPunktow.erase(vectorPunktow.begin(),vectorPunktow.begin()+1);
    }

    return vectorCentroidow;
}

 

1 odpowiedź

+2 głosów
odpowiedź 24 stycznia 2021 przez NewEraOfPeace Gaduła (4,790 p.)
wybrane 25 stycznia 2021 przez hicodyn
 
Najlepsza
Przekaż vector poprzez referencje.
Kilka rzeczy:
1. Czy masz zawsze 100% pewności, że przelaczniki.k będzie mniejsze/równe ilości elementów w vectorze? Jeśli nie, to polecam wykonać jakieś sprawdzenia
2. Do zwykłej iteracji używaj size_t, zamiast int, a w tym przypadku nawet ranged for
3. Wygląda mi na to, że tutaj w zasadzie wystarczy Ci move
komentarz 25 stycznia 2021 przez NewEraOfPeace Gaduła (4,790 p.)
To co Ty robisz to po prostu std::move (ten drugi, z <algorithm>), który w zasadzie zostawia nas z bardzo podobnym stanem, co zwyczajny std::move (ten z <utility>). Kod, który mierzyłem, to ten sam kod, który udostępnił OP. Testowałem tylko różne jego wersje - z przekazywaniem przez referencję, z resize do rozmiaru vectora z parametru, oba na raz.
komentarz 25 stycznia 2021 przez tkz Nałogowiec (42,000 p.)
Wiem co robię. Kwestia kosztu. Standardowy erase jest O(n), gdzie podany przeze mnie jest w O(1). Mierzenie kodu autora sprowadza się do usuwania, które jest najbardziej czasochłonne. Kopiowanie to minimalny koszt w porównaniu z pętlą.
komentarz 25 stycznia 2021 przez NewEraOfPeace Gaduła (4,790 p.)
No tak, bo usuwamy z przodu, a nie z tyłu, ale tak czy siak nie widzę sensu pisać osobnej funkcji tego typu, skoro std::move zrobi to za nas i to jeszcze szybciej.
komentarz 25 stycznia 2021 przez tkz Nałogowiec (42,000 p.)
Ale co zrobi? Usunie? Przeniesie własność? Nie wiem do końca do czego się odnosisz. Kod by dużo rozjaśnił.  Bez testów wydajnościowych, trudno mi powiedzieć co będzie lepsze, czytaj szybsze.
komentarz 25 stycznia 2021 przez NewEraOfPeace Gaduła (4,790 p.)
Przenosi własność, mam na myśli move jako cast do r-val reference.

Podobne pytania

0 głosów
1 odpowiedź 833 wizyt
pytanie zadane 8 kwietnia 2018 w C i C++ przez giedymin33 Początkujący (290 p.)
+1 głos
0 odpowiedzi 440 wizyt
pytanie zadane 2 czerwca 2021 w C i C++ przez Mavimix Dyskutant (8,390 p.)
0 głosów
1 odpowiedź 306 wizyt
pytanie zadane 15 maja 2020 w C i C++ przez Majster6918 Gaduła (4,030 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...