2014-11-24 22 views
-2
In header file... 

    public: 
    struct storeData 
     { 
      int iAccountNumber; 
      int iPin; 
      double dBalance; 
      string sFirstName; 
      string sLastName; 
      string sMiddleInitial; 
     }; 
     vector <storeData> storeDataArray; 

private: 
    string sTempArray [7]; 

    string m_sFirstName; 
    string m_sLastName; 
    string m_sMiddleInitial; 
    int m_iAccountNumber; 
    int m_iPin; 
    double m_dAmount; 

在另一個文件(的.cpp)如何爲特定向量的索引分配值?


m_iAccountNumber =的atoi(sTempArray [1] .c_str()); //帳號信息位於索引1 m_sFirstName = atoi(sTempArray [2] .c_str()); //名字位於索引2 m_sLastName = atoi(sTempArray [3] .c_str()); //姓氏位於索引3 m_sMiddleInitial = atoi(sTempArray [4] .c_str()); //中間inital位於索引4 m_dAmount = atoi(sTempArray [5] .c_str()); //數量位於索引5中 m_iPin = atoi(sTempArray [6] .c_str()); // pin info is located in index 6 cout < <「AFTER assign variable from array」< < endl; // int iAccountFinder = findAccountNumberInStore(m_iAccountNumber); //發送數據以驗證帳號是否存在

int iIndex = 0; 

while(!storeDataArray.empty())//index could be 0 if array is empty or find that array is not empty and use loop until empty 
{ 
    if(m_iAccountNumber == storeDataArray[iIndex].iAccountNumber) 
    { 
     //return error code DU (duplication account number) 
    } 
    iIndex ++; //to keep loop until empty index 
} 
if(m_dAmount <= 0) 
{ 
    //return error code BADAMT 
} 

下面的代碼導致程序崩潰。

storeDataArray[iIndex].iAccountNumber = m_iAccountNumber; 
storeDataArray[iIndex].sFirstName = m_sFirstName; 
storeDataArray[iIndex].sLastName = m_sLastName; 
storeDataArray[iIndex].sMiddleInitial = m_sMiddleInitial; 
storeDataArray[iIndex].dBalance = m_dAmount; 
storeDataArray[iIndex].iPin = m_iPin; 
+0

你是否曾經從'storeDataArray'中移除元素?你爲什麼期望它最終是空的? – 2014-11-24 23:23:07

+0

從不在頭文件中使用'使用'子句。 – 2014-11-24 23:29:11

回答

0

在C++中,應使用一個函數來創建一個數據要存儲在你的入門載體:

storeData makeStoreData(int accountNumber, int pin, double balance, const string& fn, const string& ln, const string& mi) { 
    storeData data; 
    data.iAccountNumber = accountNumber 
     data.iPin = pin; 
    data.dBalance = balance; 
    data.sFirstName = fn; 
    data.sLastName = ln; 
    data.sMiddleInitial = mi; 
} 

然後,使用std::vector::push_back添加連續元素:

storeDataArray.push_back(makeStoreData(m_iAccountNumber, m_iPin, m_dAmount, m_sFirstName, m_sLastName, m_sMiddleInitial)); 

您也可以使用std::vector::insert,但請注意以下事實:

向量通過在指定位置的 元素之前插入新元素進行擴展,從而有效地將容器大小增加 插入的元素數量。

這使分配的存儲空間 的自動重新分配,如果僅-and如 - 新的向量大小超過了電流矢量 容量。

由於載體使用數組作爲其底層存儲,插入在比矢量端其它位置 元件導致容器 移居所有均位置到它們的新位置 之後的元素。與通過其他種類的序列 容器(例如list或forward_list)執行相同操作的操作相比,這通常是效率低下的操作。