如何填充此向量? Stroustrup的例子

时间:2012-01-30 03:47:58

标签: c++ loops vector

我正在阅读Stroustrup的编程原理和使用C ++的实践。在第287页,他在评估顺序的标题下给出了一个例子。但我并不完全理解这个例子。构建时,每次都会创建并销毁“stringy”输入,直到某人键入“quit”。

如何更改代码以便向量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 :(得分:0)

对于每个输入的s,for循环使用s的字母填充stripped。然后在while循环结束之前,它在v1的末尾被推送。所以v1.size()是非退出输入的数量。

请注意,push_back执行字符串复制,并在}调用stripped的析构函数。 (事实上​​,编译器将优化这两个操作。)