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

Czyszczenie wektora c++

Object Storage Arubacloud
+1 głos
1,165 wizyt
pytanie zadane 13 kwietnia 2021 w C i C++ przez Pawolo122 Początkujący (330 p.)
Mam pytanko, czy istnieje funkcja w c++, która całkowicie czyści wektor. Z tego co mi wiadomo vector.clear() czyści elementy wektora, ale nie usuwa indeksów. Jak usunąć indeksy z wektora, tak aby z wektora, który zawiera jakieś elementy i ma jakiś size zrobić wektor, kompletnie pusty, który ma size równy 0.

3 odpowiedzi

+2 głosów
odpowiedź 13 kwietnia 2021 przez adrian17 Ekspert (346,320 p.)

Z tego co mi wiadomo vector.clear() czyści elementy wektora, ale nie usuwa indeksów.

Nie wiem co to znaczy "usuwa indeksy", ale nie, wydaje ci się i zgadujesz zamiast zaglądać do dokumentacji.

https://en.cppreference.com/w/cpp/container/vector/clear

Erases all elements from the container. After this call, size() returns zero.

komentarz 13 kwietnia 2021 przez adrian17 Ekspert (346,320 p.)
(inna sprawa, że size() z definicji zwraca liczbę elementów. Więc gdyby clear() "usuwał elementy ale nie zmniejszał size", to byłby kompletnie bezużyteczny i psuł założenia vectora ;) )
+2 głosów
odpowiedź 13 kwietnia 2021 przez Jakub 0 Pasjonat (23,120 p.)

Z tego co mi wiadomo vector.clear() czyści elementy wektora, ale nie usuwa indeksów.

Przypuszczam, że chodzi Ci o to, że clear() czyści wektor, ale nie koniecznie zwalnia zajętego przez niego obszaru pamięci. Jeśli tak, to możesz poczytać o tym: https://en.cppreference.com/w/cpp/container/vector/shrink_to_fit

lub zastosować swap:

std::vector<T>().swap(my_vector); 

 

+1 głos
odpowiedź 13 kwietnia 2021 przez VBService Ekspert (254,630 p.)

Zgadzam się z tym co napisał @adrian17, ale jeśli mimo tego masz "wątpliwości" co do użycia vector.clear(), to może vector.erase(), np.:

online

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> my_vector { 1, 2, 3, 4, 5 };
    
    for (auto v: my_vector)
        std::cout << v << " ";
    
    my_vector.erase(my_vector.begin(), my_vector.end());
    
    std::cout << "\n";
    
     for (auto v: my_vector)
        std::cout << v << " ";   
    
    my_vector = { 6, 7, 8, 9, 10 };
    
    std::cout << "\n";
    
    for (int i=0; i<my_vector.size(); ++i)
        std::cout << my_vector[i] << " ";  
    
    return EXIT_SUCCESS;
}

 

Podobne pytania

0 głosów
1 odpowiedź 172 wizyt
0 głosów
2 odpowiedzi 513 wizyt
–1 głos
1 odpowiedź 249 wizyt
pytanie zadane 29 sierpnia 2017 w C i C++ przez Shiro Stary wyjadacz (10,300 p.)

92,702 zapytań

141,615 odpowiedzi

320,180 komentarzy

62,062 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

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!

...