/ / Jak mogę wyczyścić () wektor wewnętrzny w typie wektora <pair <int, vector>>? - c ++, wektor, wyczyść

Jak mogę wyczyścić () wektor wewnętrzny w typie wektora <pair <int, vector>>? - c ++, wektor, wyczyść

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 № 1

Jeś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::pairs 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>());