我正在阅读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);
}
}
答案 0 :(得分:0)
对于每个输入的s
,for循环使用s的字母填充stripped
。然后在while循环结束之前,它在v1
的末尾被推送。所以v1.size()
是非退出输入的数量。
请注意,push_back
执行字符串复制,并在}
调用stripped
的析构函数。 (事实上,编译器将优化这两个操作。)