需要修改给定的字符串,以便没有句点。字符串的其余部分保持不变。
我想到了使用迭代方法并使用string :: erase。 在Java中,我可以使用replaceAll函数轻松完成它。 按照这些思路,开发人员发布了解决方案:
var divToChange = $('.home-hero-effect.background-wrapper');
var lastScroll = 0;
$(document).scroll(function(event){
var st = $(this).scrollTop();
if (st > lastScroll){
var divHeight = divToChange.height();
var divWidth = divToChange.width();
divHeight-=5;
divWidth-=5;
divToChange.css({'width':divWidth, 'height':divHeight});
}
else {
var divHeight = divToChange.height();
var divWidth = divToChange.width();
divHeight+=5;
divWidth+=5;
divToChange.css({'width':divWidth, 'height':divHeight});
}
lastScroll = st;
});
该行代码可以完美运行。但是我不明白它是如何工作的。据我了解,擦除功能会删除范围内的所有字符。 remove函数在删除句点之后将迭代器返回到该点,然后从该点擦除功能。我很困惑。有什么想法吗?
答案 0 :(得分:3)
很容易感到困惑,但是删除功能是不删除所有句点。
假设在remove
之前您的字符串是"a.b.c."
,然后在remove
之后是"abc..."
。擦除方法正在执行的操作是擦除现在位于字符串末尾的句点。
现在,问为什么remove
如此行事是一个合理的问题,但考虑一下remove
的功能,它只有一对迭代器。迭代器不能用于从容器中删除项目,迭代器不能使您访问它所引用的容器。因此remove
(及其他类似功能)无法从容器中删除任何内容。他们所能做的就是重新排列顺序,以便以后的一些代码可以轻松地进行实际删除。
这个成语有个名字,但此刻我已经不知道了。
答案 1 :(得分:0)
std::remove
作用于范围。范围是一对迭代器,分别表示其begin
和end
。
std::string::erase
或任何容器erase
对string
(/容器)起作用。
从范围中删除元素可以认为是返回了一个新范围。例如,通过将元素放置在end
上将其从范围中删除,新范围是从begin
到end-1
。
从容器中删除元素是不同的。容器拥有该元素,并负责实际“擦除”该元素。
总结:您将开始将temp.begin()
组成的范围内的所有元素传递到temp.end()
,直到std::remove
传递给end
为止(之后是改组元素),最后std::string::erase
缩小string
以仅包含该新字符范围。