3

C ++では、配列の大きさを指定せずに配列を割り当てることができますか?食料品のチェックアウトプログラムをシミュレートしています。入力は次のようにする必要があるため、多次元を使用してこれを実現します。「製品番号と数量を入力してください」110111 4(最初は製品番号、2番目は数量)。

これは、2番目の値のためにエラーをスローします

#include <iostream>
#include <fstream>
#include "checkout.h"
using namespace std;

int main()
{
    Checkout check;
    int choice;
    int array_size = 0;
    int max = 10;
    int* product_info = new int[max][1];

    do{
        cout << "Please Enter Item Number and Quantity: ";
        cin >> product_info[array_size][array_size];
    }while(!choice == 0);

    system("pause");
    return 0;
}

編集*この例では配列cinがめちゃくちゃになっていることに気づきました。

4

1 に答える 1

2

2 次元配列は、このタスクにはあまり効率的ではないようです。配列は非常にまばらになります。

必要に応じて動的に拡張できますが、1 つの次元 (コーディング時間として選択できる) のみで、もう 1 つの次元は永続的に固定する必要があり、これはせいぜい半分のソリューションです。

あなたのプログラムでは、バインドされていると宣言されている 1 つの次元を使用します1。これは、許可されたインデックスが から0まで0の範囲しかないため、そのディメンションが実際には存在しないことを意味します。

したがって、1 次元配列のようなものが必要なだけです (製品 ID によってインデックスが付けられます。数量は、配列の 2 番目の次元としてではなく、配列内に配置されます)。アプリケーションでvectorは、配列の代わりに (コメントに示されているように) 動的な側面 (再割り当て) が処理されるため、その時点でのベクトルの大きさを気にする必要さえありません。

以下は、構造体を宣言する方法です。ただし、POS コード (アイテムの ID) は通常、実際のアプリケーションでは大きすぎて収まりintません。また、数量が常に完全に整数であるとは限りません。

struct transaction_line
{
    int poscode;
    int quantity;
};

std::vector<transaction_line> transaction;
于 2012-06-03T20:55:07.860 に答える