当前位置: 首页 > 知识库问答 >
问题:

C++中使用max_element时的分割错误

苏鹏鹍
2023-03-14

根据其他建议,取消引用可能会出现问题,但我在调用max_element函数时甚至在取消引用之前就出现了分段错误。

最小可复制示例:

#include <bits/stdc++.h>
using namespace std;

class B
{
    public:
    int a, b;
    int getA()
    {
        return a;
    }
    int getB()
    {
        return b;
    }
};
class A
{
    public:
    vector<B> array;
    A()
    {
        array.resize(5);
        array[0].a = array[0].b = 3;
        array[1].a = array[1].b = 5;
        array[2].a = array[2].b = 7;
        array[3].a = array[3].b = 1;
        array[4].a = array[4].b = 2;
    }
    vector<B> getArray()
    {
        return array;
    }
};

int main()
{
    A aobj;
    B maxE = *std::max_element(aobj.getArray().begin(), aobj.getArray().end(),
        [](B jobA, B jobB) {
        return jobA.getA() < jobB.getA();
    });
    
    cout<<maxE.getA();
    return 0;
}

共有1个答案

安明亮
2023-03-14

a的成员函数

    vector<B> getArray()

返回成员变量数组的副本。调用它两次将生成两个独立的副本,因此将它们与std::max_element一起使用是危险的。

应该让函数返回对成员变量array的引用。

    vector<B>& getArray() // add &
 类似资料:
  • 本文向大家介绍C ++中的回文分割III,包括了C ++中的回文分割III的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个包含小写字母和整数k的字符串s。我们必须维护一些属性。这些是- 首先,我们必须将s的某些字符(如果需要)更改为其他小写英文字母。 然后将字符串s分为k个子字符串,以使每个子字符串都是回文。 我们必须找到为分割字符串而需要更改的最少字符数。 因此,如果字符串像“ abab

  • 问题内容: 我陷入了一个似乎无法解决的问题。拆分时,我应该能够获取 ID,名称,并 通过设置 row [0],row [1],row [2]进行检查 。奇怪的是,只有row [0](id)似乎有效。 名称,检查 给我一个错误。有人可以进一步帮助我吗? 数据示例: 码: 错误信息: 解决了 似乎文件末尾的值(问号)不正确。删除此行时。我的代码正常工作(没有Patter.quote)。谢谢大家的快速答

  • 本文向大家介绍C++的字符串分割函数的使用详解,包括了C++的字符串分割函数的使用详解的使用技巧和注意事项,需要的朋友参考一下 经常碰到字符串分割的问题,这里总结下,也方便我以后使用。 一、用strtok函数进行字符串分割 原型: char *strtok(char *str, const char *delim); 功能:分解字符串为一组字符串。 参数说明:str为要分解的字符串,delim为分

  • 我的C++代码如下所示,问题是它输出的是“=======”,但之后却说“分段错误”。我真的不明白这个分割错误。有人能告诉我代码的哪一部分错了吗?

  • 本文向大家介绍C#文件分割的方法,包括了C#文件分割的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#文件分割的方法。分享给大家供大家参考。具体如下: 1. 小文件分割(适用于小于等于64M的文件): 2. 大文件分割(适用于大于64M的文件) 希望本文所述对大家的C#程序设计有所帮助。

  • 我在这里看到过许多类似的线程,但我的问题是,我的程序实际上是在不同的设置下运行的。 例如:当我的矩阵是 对于2个核心:错误11 对于4,8,16等工作正常。 矩阵: 对于任何核心设置:错误11。 我不明白为什么会发生这种情况,每个过程都需要一个2048/(总过程)X 2028矩阵来计算。它应该工作正常。 以下是我声明矩阵的方式: 接收: 和发送: 我不明白,它应该起作用了。你认为这可能是内存问题,