Как мне заполнить этот вектор? Пример Страуструпа - PullRequest
0 голосов
/ 30 января 2012

Я читаю Принципы и практику программирования Страуструпа с использованием C ++. На странице 287 он приводит пример под заголовком «Порядок оценки». Но я не совсем понимаю пример. В соответствии с созданием «струнные» входы будут создаваться и уничтожаться каждый раз, пока кто-нибудь не введет «выход».

Как бы я изменил код, чтобы вектор v содержал каждую введенную строку? Как написано, я думаю, что v.size () никогда не будет больше 1. Я хочу, чтобы он повторял цикл и вставлял все зацикленные в вектор, а не вставлял, удалял и вставлял по мере зацикливания.

(код из книги)

vector <string> v; //this is defined globally

void function()
{

     string s;
     while(cin>>s && s!="quit")
     {
     string stripped;
     string non_letters;

     for (int i=0; i<s.size(); ++i)
         if (isalpha(s[i])) 
              stripped +=i;
         else 
              not_letters += s[i];
     v.push_back(stripped);
     }

}

1 Ответ

0 голосов
/ 30 января 2012

Для каждого введенного s цикл for заполняет stripped буквами s.Затем до конца цикла while он выдвигается в конце v1.Таким образом, v1.size() - это число незапрошенных входов.

Mind, push_back копирует строку, и при } вызывается деструктор stripped.(Фактически компилятор оптимизирует эти две операции.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...