/ / Як я можу очистити () внутрішній вектор у типі вектора <пара <int, вектор>>? - c ++, вектор, ясно

Як я можу очистити () внутрішній вектор у вигляді вектора <пара <int, вектор>>? - c ++, вектор, чистий

Я оголосив векторну пару int і vector як vector<pair<int,vector<int> > v(10) . Тепер я хочу використовувати чітку функцію як v[i].clear() і очікуючи, що це очистить рядок v[i]. Але компілятор видає помилку. Будь ласка, допоможіть мені правильно використовувати функцію clear (), щоб очистити певний рядок у такому векторному оголошенні або запропонуйте мені інший спосіб зробити це.

Відповіді:

0 для відповіді № 1

Якщо ви хочете стерти i-й ряд, тоді вам потрібно стерти:

v.erase(v.begin() + i);

У вашому прикладі це зменшило б розмір вектора на одиницю, залишивши лише 9 елементів.

З іншого боку, якщо ви хочете повторно ініціалізувати i-й ряд, щоб він містив те саме, що робив, коли ви вперше створили вектор, щоб у ньому було 10 елементів, тоді вам потрібно:

v[i] = pair<int, vector<int> >();

- або

v[i].first = 0;
v[i].second.clear();

0 для відповіді № 2

Ваш зовнішній std::vector містить std::pairS і clear є метод на std::vector ні std::pair. Схоже, ви можете це означати:

v[i].second.clear();

Якщо ви хочете видалити ціле яЕлемент від вектора, то це питання інше, ніж те, що ви задали. Замість цього ви можете видалити його таким чином:

v.erase(v.begin() + i);

Якщо ви хочете повністю скинути яth елемент, тоді вам слід побудувати таке значення за замовчуванням:

v[i] = pair<int, vector<int> >();

або так:

v[i] = std::make_pair(0, std::vector<int>());

Також зауважте, що дзвоніть clear насправді не звільняє "зарезервований" простір всередині вектора, тому якщо ваш вектор дійсно великий і ви цього хочете справді позбудьтеся всієї пам'яті, тоді вам потрібно буде призначити порожній (побудований за замовчуванням) вектор. Як варіант, ви можете зателефонувати за допомогою ідіоми swap-with-empty:

v[i].second.swap(std::vector<int>());