【问题标题】:How would I change an array to a vector?如何将数组更改为向量?
【发布时间】:2015-05-02 18:43:03
【问题描述】:

所以我有这个代码,它是一个支票簿程序,我必须使用 STL 并让它做同样的事情,所以我唯一能想到的改变是将其中的数组转换为向量。如果您认为我可以做得更多,请告诉我,我是初级程序员,而 c++ 是我的弱语言之一。

template <class DataType>
class Checkbook
{
public:
    Checkbook( );
    Checkbook( float iBalance );
    void setBalance( float amnt );
    bool writeCheck( const DataType & amount ); 
    void deposit( float amount );
    float getBalance(  ) const;
    DataType getLastCheck( ) const;
    float getLastDeposit( ) const; 
private:
    float balance;
    DataType lastCheck;
    float lastDeposit;
};


template <class DataType>
bool operator > (DataType tempcheck, float z)
{
    if(tempcheck.amount > z)
        return true;
    return false;
}

template <class DataType>
float operator - (float z, DataType tempcheck)
{
    z = z - tempcheck.amount;
    return z;
}


#include<iostream>
using namespace std;

template <class DataType>
Checkbook<DataType>::Checkbook( )
{}

template <class DataType>
Checkbook<DataType>::Checkbook( float initBalance )
{
    balance = initBalance;
}

template <class DataType>
void Checkbook<DataType>::setBalance( float amount )
{
    balance = amount;
}

template <class DataType>
bool Checkbook<DataType>::writeCheck( const DataType & amount )
{
    if ( amount > balance )
        return false;
    balance = balance - amount;
    cout<<"\n\nbalance = "<<balance<<endl<<endl;
    lastCheck = amount;
    return true;
}

template <class DataType>
void Checkbook<DataType>::deposit( float amount )
{
    balance += amount;
    lastDeposit = amount;
}

template <class DataType>
float Checkbook<DataType>::getBalance( ) const 
{
    return balance;
}

template <class DataType>
DataType Checkbook<DataType>::getLastCheck( ) const
{
    return lastCheck;
}

template <class DataType>
float Checkbook<DataType>::getLastDeposit( ) const
{
    return lastDeposit;
}

#include <iostream>
#include <iomanip>
#include <ctime>
#include <string>
#include <sstream>


using namespace std;

struct Check
{
    static string Name;
    static string account;
    int check;
    string checkDate;
    float amount;
    string comment;
    string receipent;
};

string Check::Name = "";
string Check::account = "";

int main( )
{
    struct Check ck[100];
    float balance;
    float Deposit=0.0;
    float WriteCheck=0.0;

    time_t now = time(0);
    tm *ltm = localtime(&now);

    string CurrentDate;
    stringstream mon, day, year;
    int temp;

    temp = 1 + ltm->tm_mon;
    mon << temp;


    temp = ltm->tm_mday;
    day << temp;


    temp = 1900 + ltm->tm_year;
    year << temp;
    CurrentDate = mon.str() + "/" + day.str() + "/" + year.str();


    cout<<"\nEnter name of Account Holder : ";

    getline(cin,Check::Name);
    cout<<"\nEnter Account No : ";

    getline(cin,Check::account);
    cout <<"\nEnter your initial balance: ";

    cin >> balance;
    Check tempCk;
    Checkbook<Check> cbook( balance );
    int i=0;
    int j;
    int choice=0;
    do
    {
        cout<<endl<<"1- Writing checks";
        cout<<endl<<"2- Show last checks";
        cout<<endl<<"3- Deposit";
        cout<<endl<<"4- Show Balance";
        cout<<endl<<"5- Quit";

        cout<<"\n\nEnter your choice : ";
        cin>>choice;

        switch(choice)
        {
            case 1:
                cout<<"\nCheck Number : "<<i+1<<endl;
                ck[i].check = i+1;
                cout<<"\nEnter receipent name : ";

                getline(cin,ck[i].receipent);
                cout<<"\nEnter amount : ";

                cin>>ck[i].amount;
                cout<<"\nDate of check : "<<CurrentDate<<endl;
                ck[i].checkDate = CurrentDate;
                cout<<"\nEnter Comment for check : ";

                getline(cin,ck[i].comment);

                if(!cbook.writeCheck(ck[i]))
                {
                    cout<<"\n\nNot enough balance "<<ck[i].amount<<endl<<endl;  
                }
                else
                    i++;
                break;
            case 2:
                cout<<"\n\nDetails of Last Check\n\n";
                cout<<"*************************";
                for(j = i-1;j>=0;j--)
                {
                    cout<<"\nCheck Number : "<<ck[j].check;
                    cout<<"\nDate of Check : "<<ck[j].checkDate;
                    cout<<"\nReceipent : "<<ck[j].receipent;
                    cout<<"\nAmount on Check : "<<ck[j].amount;
                    cout<<"\nComment : "<<ck[j].comment;
                    cout<<"\n*************************\n";
                }
                break;
            case 3:
                cout<<"\nEnter amount to deposit : ";
                cin>>Deposit;
                cbook.deposit(Deposit);
                break;
            case 4:
                cout << fixed << showpoint << setprecision( 3 );
                cout << "Current Balance is: " << cbook.getBalance( )<<" " << endl;
                break;
            default:
                if(choice!=5)
                cout<<"\n\nInvalid Entry, please try again\n";
        }
    }while(choice!=5);



    return 0;
}

到目前为止,我只知道我需要这样做。

Check ck[100]; -> std::vector<Check> ck;

【问题讨论】:

  • std::vector&lt;Check&gt; vec(ck, ck + 100);
  • 您发布了很多与您的问题无关的代码。如果您使用有针对性的示例,您的问题可能对其他有类似问题的人更有帮助。

标签: c++ arrays vector stl


【解决方案1】:

快速浏览一下您的代码后,我相信这是您唯一需要做的事情:

替换

struct Check ck[100];

与:

std::vector<Check> ck(100);

或者因为你有一个固定大小的数组,你可以像这样使用std::array

std::array<Check,100> ck;

【讨论】:

  • 我不认为他想要一个固定大小的数组。
  • @SHR:他说他希望它像以前一样使用向量而不是 C 数组。
【解决方案2】:

你可以声明一个局部变量,主要是:Check tmp;

向量为:std::vector&lt;Check&gt; ck;

添加新检查时,您在本地 tmp 上工作,成功完成后,将其添加到向量中。

在您的代码中:

if(!cbook.writeCheck(tmp)){
   cout<<"\n\nNot enough balance "<<tmp.amount<<endl<<endl;  
}else{
   ck.push_back(tmp);
}

另外,您不需要保留计数或索引,因为您可以使用ck.size()

【讨论】:

    【解决方案3】:

    遍历ck[]push_back 每个项目。类似这样。

     std::vector<Check> ckvector;
     for(int i=0;i<100;i++)
     ckvector.push_back(ck[i]);
    

    【讨论】:

    • 不需要在向量中添加空项,也不需要声明数组..
    猜你喜欢
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多