gpt4 book ai didi

c++ - std::for_each,具有 operator() 的对象重载而不维护状态

转载 作者:太空宇宙 更新时间:2023-11-04 15:26:49 25 4
gpt4 key购买 nike

试图回答this问题我想出了以下代码:

#include <string>
#include <iostream>
#include <algorithm>
#include <vector>

class Sizes
{
public:
void operator() ( std::vector<int> v ) {
sizeVec.push_back( v.size() );
}
std::vector<int> sizeVec;
};

void outFunc (int i) {
std::cout << " " << i;
}
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<std::vector<int>> twodVec;

std::vector<int> vec;
vec.push_back( 6 );
twodVec.push_back( vec );
vec.push_back( 3 );
twodVec.push_back( vec );
vec.push_back( 8 );
twodVec.push_back( vec );
vec.push_back( 3 );
twodVec.push_back( vec );

Sizes sizes;
std::for_each( twodVec.begin(), twodVec.end(), sizes );
std::for_each( sizes.sizeVec.begin(), sizes.sizeVec.end(), outFunc );

return 0;
}

调试显示 Sizes::operator() 被调用,并且 sizeVec 的大小随着每次调用而增加,正如预期的那样。然而,当第二个 std::foreach 被调用时,sizeVec 是空的......我已经创建了一个涉及将 vector 传递到 Sizes 的工作但是有谁知道发生了什么

最佳答案

std::for_each 按值而不是按引用获取仿函数,因此原始对象不受影响。你需要做的:

sizes = std::for_each( twodVec.begin(), twodVec.end(), sizes );

关于c++ - std::for_each,具有 operator() 的对象重载而不维护状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7024198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com