我刚读在C++标准std::for_each是一个非修改序列操作,具有沿find,search等等.这是否意味着应用于每个元素的函数不应该修改它们?这是为什么?什么可能出错?
这是一个示例代码,其中修改了序列.你能看到它有什么问题吗?
void foo(int & i)
{
i = 12;
}
int main()
{
std::vector<int> v;
v.push_back(0);
std::for_each(v.begin(), v.end(), foo);
// v now contains 12
}
Run Code Online (Sandbox Code Playgroud)
我怀疑这只是一个解释问题,但我想对此有所了解.
PS:我知道我可以用std::transform而不是for_each,但那不是重点.
我正在学习 C++ 的自学课程,学习标准库的工作原理,我想了解这段代码是如何for_each工作的,特别是关于变异对象(与本机数据类型相反)。我意识到你不应该使用for_each这种方式,但这是为了学习。
我原以为这段代码会改变集合中的所有元素,但事实并非如此。
我的问题是: 1. 为什么这段代码不会改变集合?2.如何代码被修改,以便它会修改的设置?澄清一下:有没有办法保留for_each并让它操纵集合,或者这是不可能的并且transform必须使用其他一些方法(例如)?
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
class A {
int a;
public:
A(int a) : a(a) {}
int getA() const { return a; }
void setA(int a) { this->a = a; }
bool operator<(const A & b) const { return a<b.a; }
};
struct myprinter {
void operator()(const A & a) { cout << a.getA() …Run Code Online (Sandbox Code Playgroud)