作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只想用 for_each 打印一个 vector 。
using namespace std;
struct Print {
int z = 0;
void operator()(int i) {
if (z) cout << ' ';
cout << i;
z = 1;
}
~Print() {
if (z) cout << endl;
}
};
main() {
vector<int> v = {1, 2, 3, 4, 5};
for_each(begin(v), end(v), Print());
}
它工作不正常,它调用析构函数两次并打印两个换行符而不是一个。为什么?谁能解释这种奇怪行为的逻辑?顺便说一句,它适用于丑陋的全局变量。
int z;
struct Print {
void operator()(int i) {
. . .
};
我正在使用 GCC。
最佳答案
这不是“错误”。您忘记了谓词被复制,至少一次。实际上,谓词被多次复制是合法的。你的类(class)应该考虑到这一点;并且不通过使其成员static
(这会中断后续调用)。 std::for_each
并不是真正适合这项工作的工具。
关于C++: "illogical"析构函数行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33201475/
我只想用 for_each 打印一个 vector 。 using namespace std; struct Print { int z = 0; void operator()(int
我想知道为什么我的代码给出了 y[0] 的更改值,而我无处显式更改它。我在下面的链接中提供了输出: Code Output 代码: #include int main() { std::co
我正在做 Ruby Koans 中的练习我对以下 Ruby 怪癖感到震惊,我发现它真的无法解释: array = [:peanut, :butter, :and, :jelly] array[0]
我是一名优秀的程序员,十分优秀!