如何为特定向量索引赋值?

时间:2014-11-24 23:18:21

标签: c++ vector

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()); //中位数位于指数4     m_dAmount = atoi(sTempArray [5] .c_str()); //金额位于索引5中     m_iPin = atoi(sTempArray [6] .c_str()); // pin信息位于索引6中 cout&lt;&lt; “从数组中分配变量后”&lt;&lt; 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;

1 个答案:

答案 0 :(得分: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但请注意以下事实:

  

通过在元素之前插入新元素来扩展向量   指定的位置,有效地增加了容器的大小   插入的元素数量。

     

这会导致自动重新分配已分配的存储空间   if - 并且仅当 - 新的矢量大小超过当前矢量   容量。

     

因为矢量使用数组作为其底层存储,所以插入   在矢量端以外的位置的元素导致容器   将所有位置之后的元素重新定位到新的元素   位置。与此相比,这通常是低效的操作   一个由其他类型的序列执行相同的操作   容器(例如list或forward_list)。