这里我试图创建一个包含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));
}
}
答案 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;