2012-01-30 2 views
0

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

Как бы изменить код, чтобы вектор 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

@ Джерри Карсон: Это не нарушение авторских прав, если фрагменты кода являются «* для целей, таких как критика, комментарий, новости, обучение (включая несколько экземпляров для использования в классе), стипендию или исследование *« согласно [справедливому использованию ] (http://www.law.cornell.edu/uscode/17/107.html). Несомненно, этот вопрос подпадает под «научную» или «исследовательскую», или, возможно, даже «преподавательскую», поскольку на самом деле это весь смысл этого сайта. Нам нужно увидеть хотя бы ваш фактический фрагмент кода, чтобы помочь вам. –

+1

* по причинам авторского права этот код не совсем такой же, как и код из книги * Не будет делать сэр, пожалуйста, разместите код в книге или, по крайней мере, свободный минималистский пример. –

ответ

0

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

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

Смежные вопросы