2013-03-19 69 views
1

即時在C++上做一項任務,我堅持要如何使用用戶定義的numShares和pricePerShare將新事務添加到我的工作中。在C++中向數組結構添加元素

我有一個交易結構,看起來像這樣:

struct Transaction 
{ 
string stockSymbol;  // String containing the stock symbol, e.g. "AAPL" 
string buyerName;  // String containing the buyer's name e.g. "Mr Brown" 
int buyerAccount;  // Integer containing an eight digit account code 
int numShares;   // Integer containing the number of sold shares 
int pricePerShare;  // Integer containing the buy price per share 
}; 

這是buildTransaction類:

static Transaction* buildTransactions(int numTransactions) 
{ 
    int maxShareVolume = 100000; 
    int maxSharePrice = 1000; 

    Transaction *transactions = new Transaction[numTransactions]; 

     for(int idx = 0; idx < numTransactions; idx++) 
     { 
      transactions[idx].stockSymbol = pickRandomStockSymbol(); 

      std::string buyerName = pickRandomBuyer(); 
      transactions[idx].buyerName = buyerName; 
      transactions[idx].buyerAccount = lookupBuyerAccount(buyerName); 

      transactions[idx].numShares = 1 + rand() % maxShareVolume; 
      transactions[idx].pricePerShare = 1 + rand() % maxSharePrice;  
     } 

     return transactions; 
    } 

如何將我用它來使用這個數據添加到交易數組:

void Analyser::addTransactions(Transaction* transactions, int numTransactions) 

我會從這個假設,我真的需要作爲用戶輸入wo它是股份數量和每股價格,但其他信息自動填充,從數組中選擇。

+0

@Andrew Glass你想要我們展示一下如何操作這些聲明嗎? – 4pie0 2013-03-19 05:03:07

+0

我只是想知道我可以如何使用buildTransaction類創建一個新的事務的方式,以便當addTransactions函數運行而不是輸出10個單獨的事務時,它會輸出11. – 2013-03-19 08:09:43

回答

0

的buildTransactions代替使用陣列,則應使用矢量..會這樣寫:

:通過編輯此buildTransactions功能

std::vector<Transaction> buildTransactions(int numTransactions) 
{ 
    int maxShareVolume = 100000; 
    int maxSharePrice = 1000; 
    std::vector<Transaction> transactions; 

    for(int idx = 0; idx < numTransactions; idx++) 
    { 
     Transaction t; 
     t.stockSymbol = pickRandomStockSymbol(); 
     std::string buyerName = pickRandomBuyer(); 
     t.buyerName = buyerName; 
     t.buyerAccount = lookupBuyerAccount(buyerName); 
     t.numShares = 1 + rand() % maxShareVolume; 
     t.pricePerShare = 1 + rand() % maxSharePrice; 

     transactions.push_back(t); 
    } 

    return transactions; 
} 

,您可以輕鬆地這樣做是爲了您的addTransactions功能添加更多數據

希望能對你有所幫助:)

+0

是啊,似乎沒有代碼的幾個tweeks,只是我得到的是當我嘗試調用主要的buildTransaction \t交易*交易= Setup :: buildTransactions(numTransactions); \t Transaction * moreTransactions = Setup :: buildTransactions(numTransactions); 我得到錯誤「智能感知:非靜態成員引用必須與特定對象有關」,這與調用中的「Setup ::」有關。 – 2013-03-19 11:26:14

0

可以得到的股量,並且在addTransactions每股價格作爲輸入在一個循環中()方法如下所示:

for(int idx = 0; idx < numTransactions; idx++) 
    { 
     transactions[idx].stockSymbol = pickRandomStockSymbol(); 

     std::string buyerName = pickRandomBuyer(); 
     transactions[idx].buyerName = buyerName; 
     transactions[idx].buyerAccount = lookupBuyerAccount(buyerName); 

     ctd::cout<<"Enter number of shares for transaction "<<idx+1<<std::endl; 
     std::cin>>transactions[idx].numShares; 
     ctd::cout<<"Enter price per share for transaction "<<idx+1<<std::endl; 
     std::cin>>transactions[idx].pricePerShare;  
    } 
+0

感謝您的評論。但是並沒有添加它認爲已經編輯了數組中的所有元素而沒有向該數組添加新項目。我想要的是將numTransactions設置爲默認值10.我希望如此,如果我運行該類,我可以添加一個額外的元素到數組中。所以它將是第11個項目,但stocksymbol,buyername和buyeraccount只是隨機生成的,所以我需要更新的是股票數量和價格,然後打印出11個元素列表? – 2013-03-19 08:07:20

+0

然後,您可能需要重新調整陣列大小,這會使過程變得複雜。在這種情況下,您可以使用「std :: vector vTransactions」而不是使用「Transaction * transactions」,並將此向量作爲addTransactions(std :: vector &vTransactions)方法的參數,您可以只調用push_back您剛剛初始化的交易對象到您的交易矢量 – 2013-03-19 08:12:31

+0

我該怎麼去做呢?對不起我的無知,但即時通訊非常新的這個C++的東西 – 2013-03-19 08:25:45