如何在向量元素中找到结构数据?

时间:2014-12-07 23:50:58

标签: c++ vector

我正在研究客户端/服务器项目。我正在努力寻找如何在数据库中查找矢量信息以匹配客户要求的帐号。

头文件

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

服务器文件中的

..

int MyThread::findAccountNumberInStore(int iAccountNumber)
{
    int iIndex = -1;

    for(int unsigned i = 0; i <= storeDataArray.size(); i++)
    {
         //i got error message in if statement. i dont know how to fix it.
        if(iAccountNumber == storeDataArray.at(dataObj.iAccountNumber))
        {
              return i;
        }

    }
    return iIndex; //no account is found...
}

另外,我如何将结构的数据存储在向量中(所有数据都在一个元素中)?

2 个答案:

答案 0 :(得分:1)

来自vector.at说明:

Returns a reference to the element at position n in the vector.
  

该函数自动检查n是否在向量中的有效元素的范围内,如果不是,则抛出out_of_range异常(即,如果n大于或等于其大小)。这与成员运算符[]形成对比,后者不会检查边界。

您可以在此处详细了解此功能: vector.at

你也可以在这里阅读一篇关于它的讨论: vector::at vs. vector::operator[]

你的实际问题我建议像这样使用它:

if(iAccountNumber == storeDataArray.at(i).iAccountNumber)

答案 1 :(得分:0)

你几乎拥有它 - 括号位于错误的位置,你没有正确地索引向量,你有

if(iAccountNumber == storeDataArray.at(dataObj.iAccountNumber))

应该是

if(iAccountNumber == storeDataArray.at(i).iAccountNumber)

另外我看到你在数组大小检查中使用&lt; = - 这是不正确的。向量边界从0到size() - 1