Почему вектор увеличивает свой размер до 10, когда я инициализирую его размер до 5 и даю только 5 элементов? - PullRequest
0 голосов
/ 05 апреля 2020

Итак, я делал этот вопрос о векторе, где мне нужно было принять входные данные, а затем повернуть все элементы в обратном порядке.

int main() {

    int i,n,a;   
    cin >> n;

    vector<int> arr(n);
    for(i=0;i<n;i++){
        cin >> a;
        arr.push_back(a);
    } 
    sort(arr.begin(),arr.end());
    for(i=0;i<n;i++){
        cout << arr[i] << " ";
    }
    return 0;
}

Я написал этот код, где упомянул размер как n вектора и выдвинул только n элементы в нем. Но на выходе получается 0 0 0 0 0 для 5 элементов. Я предполагаю, что это потому, что вектор расширил свою емкость до 10, и, следовательно, последние 5 элементов напечатаны, что, очевидно, 0. Почему это происходит?

Ответы [ 2 ]

2 голосов
/ 05 апреля 2020

vector<int> arr(n); создает вектор размером n с начала, все элементы инициализируются до int{} он же ноль. Затем l oop добавляет n больше элементов через push_back.

0 голосов
/ 05 апреля 2020

vector<int> arr(n);

Поскольку вы утверждаете, что n = 5, эта строка кода создает arr = {0, 0, 0, 0, 0}

Но затем вы запускаете al oop 5 раз и добавляете еще 5 элементов к вашему вектору через push_back:

for(i=0;i<n;i++){
    cin >> a;
    arr.push_back(a); // <-- mistake
}

И затем вы печатаете первые 5 элементов (которые равны 0) через

for(i=0;i<n;i++){
    cout << arr[i] << " ";
}

Поэтому ваш вывод 0 0 0 0 0.

Решение:

Вы должны добавить эти элементы в пространство, которое вы уже зарезервировали для своего вектора:

Заменить arr.push_back(a); с arr[i] = a;

В стороне:

Итак, я делал этот вопрос о векторе, где мне нужно было принять входные данные, а затем повернуть все элементы обратно

sort(arr.begin(),arr.end()); не поможет вам выполнить эту задачу.

Вам следует использовать std::reverse:

reverse(arr.begin(), arr.end());

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...