相关疑难解决方法(0)

为什么std :: for_each是非修改序列操作?

我刚读在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++ foreach standards stl

10
推荐指数
3
解决办法
3319
查看次数

使用 for_each 修改 std 容器(即使你不应该)

我正在学习 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)

c++ stl

5
推荐指数
1
解决办法
4719
查看次数

标签 统计

c++ ×2

stl ×2

foreach ×1

standards ×1