C ++我的向量的最后一个对象是覆盖每个对象

时间:2016-11-09 22:59:49

标签: c++ vector

这里我试图创建一个包含5个SavingsAccount对象的向量。每个SavingsAccount都有一个用户输入的余额。我的问题是,当我打印出余额时,每个余额的值等于最后输入的值。例如,用户输入100,200,300等,我的程序输出所有500个而不是每个输入的余额。

我知道这可能是一个非常简单的解释,但我今天似乎已经没油了。我的猜测是,当我调用accounts.push_back时,我将相同的对象分配给向量的每个元素,以便在for循环的最后一次运行中,我分配5个对象,余额为500进入矢量。

如果是这样,我不完全确定如何解决这个问题。有什么建议,或者我在某处有其他问题?提前谢谢。

#include <iostream>
#include <iomanip>
#include <vector>
#include "SavingsAccount.h" // SavingsAccount class definition
using namespace std;

void initializeAccounts(vector<SavingsAccount> &, int);

int main()
{
    //Number of accounts
    const int NUM_OF_ACCOUNTS = 5;
    //Create vector
    vector <SavingsAccount> accounts(NUM_OF_ACCOUNTS);

    //Initialize all 5 vectors with input from user
    initializeAccounts(accounts, NUM_OF_ACCOUNTS);

    //Print out the balances
    for(int i = 0; i < NUM_OF_ACCOUNTS; i++)
    {
        accounts[i].printBalance();
    }

void initializeAccounts(vector<SavingsAccount> &accounts, int accountSize)
{
    double balance = 0;

    for(int i = 0; i < accountSize; i++)
    {
        cout << "Please enter the balance for account " << i+1 << endl;
        cin >> balance;

        accounts.push_back(SavingsAccount(balance));
    }
}

3 个答案:

答案 0 :(得分:0)

您已使用NUM_OF_ACCOUNTS元素设置了矢量的大小:

vector <SavingsAccount> accounts(NUM_OF_ACCOUNTS);

因此,当您稍后在push_back方法中initialize更多元素时,它会添加到已存在的(空元素)

BTW你传递了矢量的大小,而它是自包含的。但这是另一个故事。

简单修复:在开始时将向量声明为空:

vector <SavingsAccount> accounts;

答案 1 :(得分:0)

vector <SavingsAccount> accounts(NUM_OF_ACCOUNTS);默认构造NUM_OF_ACCOUNTS。然后再推回一些,最后你的向量中会有2 * NUM_OF_ACCOUNTS项。

然后迭代第一个构造的元素。当然不是你推回的那些。

如果您想保留记忆,请改为:

vector <SavingsAccount> accounts;
accounts.reserve(NUM_OF_ACCOUNTS);

答案 2 :(得分:0)

有几种方法。

yoy定义一个空向量,函数initializeAccounts将新元素添加到向量中,如

accounts.push_back(SavingsAccount(balance));

例如

vector <SavingsAccount> accounts;

//Initialize all 5 vectors with input from user
initializeAccounts(accounts, NUM_OF_ACCOUNTS);

vector <SavingsAccount> accounts;
accounts.reserve( NUM_OF_ACCOUNTS );

//Initialize all 5 vectors with input from user
initializeAccounts(accounts, NUM_OF_ACCOUNTS);

或者您定义具有给定数字的向量,例如

vector <SavingsAccount> accounts( NUM_OF_ACCOUNTS );

//Initialize all 5 vectors with input from user
initializeAccounts(accounts, NUM_OF_ACCOUNTS);

并在您使用的功能中

accounts[I].balance = balance;