0

エントリを格納するための文字列ベクトルが正常に作成されました。whileループはToDoアイテムを要求し、SHOWキーは、文字列ベクトルに現在保存されているすべてのアイテムをユーザーに表示します。アイテムに簡単にアクセスできるように、intはアイテムの前に「実行中」の番号を表示するだけです。

ユーザーがいくつかの項目を追加した後、彼はDELと入力して、削除モードにすることができます:(ここで2を入力して、禁煙を削除し、ギャップを埋めるために配列を再配置します)

ここに画像の説明を入力してください

ここで、ユーザーが入力した数値を取得し、1でデクリメントしてベクトル配列のインデックス番号に一致させ、エントリを削除するのが好きですが、これを行うための最良の方法は何ですか?

これは、文字列ベクトルにアイテムを追加する方法です。

int taskNumber = 1;
cout<<"New task: ";
getline (cin,newTaskEntry);
taskVector.push_back(newTaskEntry);

cout<<"TOTAL TASKS IN YOUR INBOX: "<<taskVector.size()<<endl;

これは、ユーザーにすべてのエントリを表示する方法です。

for (vector<string>::iterator i = taskVector.begin(); i != taskVector.end(); ++i) 
            {
                cout<<taskNumber<<"  ";
                cout<<*i<<endl;
                taskNumber = taskNumber +1; 
            }
4

2 に答える 2

2

ベクトルのerase()メンバー関数を使用します。イテレータが必要ですが、ベクトルはランダムアクセスイテレータをサポートしているため、これは問題ではありません。

taskVector.erase(taskVector.begin() + n - 1);  // where n is the number user enters

nまた、ベクトルのサイズよりも大きくないことを確認してください。

于 2012-07-03T10:16:25.480 に答える
1

ただ:

cin >> number;
if(number > 0 && number < taskVector.size())
{
    vector<string>::iterator it(taskVector.begin() + number - 1);
    taskVector.erase(it);
}
else
    cout << "Error. Out of bounds\n";
于 2012-07-03T10:17:52.430 に答える