如何填充这个矢量?Stroustrup示例

How do I fill this vector? Stroustrup example

本文关键字:Stroustrup 示例 何填充 填充      更新时间:2023-10-16

我正在阅读Stroustrup的《使用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);
     }
}

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

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