2015-04-08 60 views
0

我想在我的代碼中找到一種方法來搜索我使用過的向量中的一個對象。我已經將信息推回​​到不同的載體中,並且我知道.size來顯示信息。我希望用戶能夠輸入銀行賬號,如果這是正確的,則顯示其他向量的內容。在一個向量中搜索對象

#include <iostream> 
#include <vector> 
#include <string> 
#include <algorithm> 

using namespace std; 

//declaring four vectors 
std::vector<string>names; 
std::vector<string>address; 
std::vector<int>age; 
std::vector<double>accountnumber; 
//forward declaration of functions 
void namesInput(); 
void addressInput(); 
void ageInput(); 
void accountnumberInput(); 


int main() 
{ 
    //variable for switch statement 
    int choice; 
    system("title HSBC Online Banking"); 
    system("color B6"); 
    cout << "Please select from the following options" << endl; 
    cout << "----------------------------------------" << endl; 
    cout << "1. Enter profile " << endl; 
    cout << "2. Search for client " << endl; 
    cout << "3. Exit" << endl; 
    cin >> choice; 
    switch(choice) 
    { 
    case 1: 
     //calling functions for first switch case 
     namesInput(); 
     addressInput(); 
     ageInput(); 
     accountnumberInput(); 
     system("cls"); 
     break; 
    case 2: 
     break; 
    case 3: 
     system("exit"); 
     break; 

    } 


    return 0; 
} 

void namesInput() 
{ 
    system("cls"); 
    for (int i = 1; i <= 3; i++) 
    { 
     string temp;//variable to give to vector 
     cout<<"Enter " << i << " first, middle and last names : "; 
     cin>>temp; 
     names.push_back(temp);//push back into vector 
    } 

} 

void addressInput() 
{ 
    system ("cls"); 
    for (int i = 1; i <= 3; i++) 
    { 
     string temp;//variable to give to vector 
     cout<<"Enter " << i << " House Number, Street, Postcode : "; 
     cin>>temp; 
     address.push_back(temp);//push back into vector 
    } 


} 

void ageInput() 
{ 
    system ("cls"); 
    for (int i = 1; i <= 3; i++) 
    { 
     int temp;//variable to give to vector 
     cout<<"Enter " << i << " Day, Month, Year : "; 
     cin>>temp; 
     age.push_back(temp);//push back into vector 
    } 


} 

void accountnumberInput() 
{ 
    system ("cls"); 
    for (int i = 1; i <= 1; i++) 
    { 
     int temp;//variable to give to vector 
     cout<<"Enter " << i << " Account Number "; 
     cin>>temp; 
     accountnumber.push_back(temp);//push back into vector 
    } 
    main(); 
} 

void findClient() 
{ 
    cout << "To find a client please enter their account number" << endl; 



} 
+0

'std :: find'可能會有幫助。 – Jarod42

+1

你應該使用銀行賬戶的矢量。如果沒有這種方式,將難以處理名稱,地址等各個向量之間的關係。 – harper

+1

順便說一句,您可能對'accountnumber'具有'double'的準確性問題(如果按照確切值進行搜索,則更多)。 – Jarod42

回答

0
std::vector<double>accountnumber; 

使用的賬號確實似乎是不錯的選擇對我說:你可能想使用std::string代替。

例如:請注意,雙精度之間的「確切」比較是不可能的(因此,使用雙精度鍵作爲關鍵字搜索帳號是有問題的);相反,你可以用字符串來完成。

因此,假設您使用帳號一個vector<string>,您可以使用std::find()找到矢量給定的帳戶位置,例如:

auto it = find(accountNumbers.begin(), accountNumbers.end(), 
       accountNumberToFind); 

if (it != accountNumbers.end()) 
{ 
    ... Found, process it ... 
} 

一旦你有了迭代器到發現帳戶,您可以使用簡單的指針/迭代器算法(如(it - accountNumbers.begin()))從中獲取基於向量0的索引。

然後,考慮到這個索引,您可以訪問其他向量中的相應項目。

然而,從面向對象的設計的角度來看,我寧願限定用於賬戶的一類,具有若干字段,如帳號,姓名,地址等,並且有一個單一的vector<Account>(代替若干向量的的單一賬戶屬性)。

0

有你的代碼的某些部分,我會建議然而重新審視,根據你的代碼,你可以做到以下幾點:

 void lookForAccount(){ 

    system ("cls"); 
    for (int i = 1; i <= 1; i++) 
    { 
     int temp;//variable to give to vector 
     cout<<"Enter " << i << " Account Number you want to look for"; 
     cin>>temp; 
     for(int j = 0;j<accountnumber.size();j++){ 
      if(accountnumber[j]==temp){ 
       cout<<"account number: "<<accountnumber[j]<<", name: "<<names[j]<<"etc..."<<endl; 
      } 
     } 
    } 
    main(); 
    } 

相反,我想這個虛擬的方法無論如何建議使用迭代器和std :: find。

但是,正如評論中指出的那樣,由於以下幾個原因,此代碼很容易出錯:以雙倍處理帳號並不是最好的選擇。此外,我建議重新設計您的代碼以使用C++對象處理所有帳戶信息。