В следующей программе я создал 3 объекта класса Person и поместил этот объект в векторный контейнер. После этого вызывается функция отображения с использованием диапазона, основанного на цикле for, и печати имени и возраста.

#include <iostream>
#include <vector>
#include <iterator>
#include <functional>
 
using namespace std; 

class Person
{
    private:
        string _name;
        int _age;
        
    public:
    
    Person()
    {
    
    }

    Person(string name, int age) : _name(name), _age(age)
    {
        
    }

    void Display()
    {
        cout<<"_name : "<<_name<<" => "<<"_age : "<<_age<<endl;
    }
};

int main()
{
    Person p1("User1", 20);
    Person p2("User2", 30);
    Person p3("User3", 25);
    
    vector<Person> per(3);
    
    per.push_back(p1);
    per.push_back(p2);
    per.push_back(p3);
    
    for(auto obj : per)
    {
        obj.Display();
    }
}

Но я не понимаю, чего мне здесь не хватает, чтобы получить результат

_name :  => _age : -1
_name :  => _age : -1
_name :  => _age : -1
_name : User1 => _age : 20
_name : User2 => _age : 30
_name : User3 => _age : 25

Вместо того

_name : User1 => _age : 20
_name : User2 => _age : 30
_name : User3 => _age : 25

Заранее спасибо.

0
Jayesh 10 Сен 2021 в 12:13

2 ответа

Лучший ответ

Когда вы определяете вектор:

vector<Person> per(3);

Вы устанавливаете размер на 3, что означает, что три элемента, сконструированные по умолчанию, будут созданы и добавлены к вектору.

Затем вы добавляете еще три, так что у вас в векторе всего шесть элементов.

Если вам нужны только три элемента, есть несколько альтернатив:

  1. Зарезервируйте только память, размер не устанавливайте:

    vector<Person> per;
    per.reserve(3);  // Allocates memory for 3 elements, doesn't set the size
    per.push_back(p1);
    per.push_back(p2);
    per.push_back(p3);
    
  2. Не отступайте, используйте индексацию для установки элементов:

    vector<Person> per(3);
    per[0] = p1;
    per[1] = p2;
    per[2] = p3;
    
  3. Инициализируйте вектор нужными элементами:

    vector<Person> per = {
        { "User1", 20 },
        { "User2", 30 },
        { "User3", 25 }
    };
    
3
Some programmer dude 10 Сен 2021 в 09:19

Вы создаете вектор размером 3, и после этого вы добавляете еще 3 элемента к этому вектору. Попробуйте распечатать количество элементов, хранящихся в вашем векторе (per.size()) после вставки ваших трех человек.

1
xuman 10 Сен 2021 в 09:18