Deklarowałem parę wektorową int i wektor jako vector<pair<int,vector<int> > v(10)
. Teraz chcę użyć funkcji clear jako v[i].clear()
i oczekując, że oczyści wiersz v[i]
. Ale kompilator zgłasza błąd. Proszę pomóż mi użyć funkcji clear (), aby wyczyścić konkretny wiersz w takiej deklaracji wektorowej lub zaproponuj mi inny sposób.
Odpowiedzi:
0 dla odpowiedzi № 1Jeśli chcesz wymazać i-tym wierszu, to chcesz usunąć:
v.erase(v.begin() + i);
W twoim przykładzie zmniejszyłoby to rozmiar twojego wektora o jeden, pozostawiając tylko 9 elementów pozostałych.
Z drugiej strony, jeśli chcesz ponownie zainicjować i-ty wiersz, tak aby zawierał to samo, co podczas pierwszego tworzenia wektora, aby zawierał 10 elementów, musisz:
v[i] = pair<int, vector<int> >();
--lub--
v[i].first = 0;
v[i].second.clear();
0 dla odpowiedzi nr 2
Twoja zewnętrzna std::vector
zawiera std::pair
s i clear
jest metodą na std::vector
nie std::pair
. Wygląda na to, że możesz to oznaczać:
v[i].second.clear();
Jeśli chcesz usunąć cały jaelement z wektora, to jest inne pytanie niż to, o co prosiłeś. Zamiast tego możesz go usunąć w ten sposób:
v.erase(v.begin() + i);
Jeśli chcesz w pełni zresetować jath element, wtedy powinieneś domyślnie skonstruować taką wartość:
v[i] = pair<int, vector<int> >();
lub w ten sposób:
v[i] = std::make_pair(0, std::vector<int>());
Pamiętaj też, że dzwonisz clear
w rzeczywistości nie zwolni "zarezerwowanej" przestrzeni wewnątrz wektora, więc jeśli twój wektor jest naprawdę duży i chcesz naprawdę pozbyć się całej pamięci, wtedy będziesz musiał przypisać pusty (domyślnie skonstruowany) wektor. Możesz też wywołać używając idiomu "swap-with-empty":
v[i].second.swap(std::vector<int>());