调用构造函数后,为什么initializer_list中的vector <int>的值会发生变化?

坎拉

我是C ++的新手,正在尝试设置矩阵类。矩阵是从initializer_list包含vector<int>条目的矩阵行中创建的。此类的方法之一应该是get_row(size_t rownumber)当我从构造函数调用实现的方法时,它将返回正确的结果。但是,当从中调用相同的方法时main(),每行的前两个元素包含一些不应在其中的巨大数字。

我认为问题与指针有关。虽然,我真的找不到在构造函数内部的调用和main内部的调用之间矩阵元素可以覆盖的地方。当我在Eclipse中进入调试模式时,指针似乎指向了预期的地址...

#include <iostream>
#include <vector>
using namespace std;

template<typename T> class myMatrix {
    private:
        initializer_list<vector<int>>::iterator it;
        initializer_list<vector<int>> matrix;
    public:
        myMatrix(initializer_list<T> values) {
        matrix = values;

        vector<int> chosen_row = get_row(1);
        cout << "Called from constructor: ";
        for (unsigned i = 0; i != chosen_row.size(); i++) {
            cout << chosen_row.at(i) << " ";
        }
        }
    vector<int> get_row(size_t x) {
        it = matrix.begin() + x - 1;
        return (*it);
        }
};

int main(int argc, char *argv[]) {
    myMatrix<vector<int>> test{{3, 4, 5, 2}, {7, 2, 3, 4}};
    vector<int> chosen_row = test.get_row(1);
    cout << endl << "Called from main: ";
    for (unsigned i = 0; i != chosen_row.size(); i++) {
        cout << chosen_row.at(i)<< " " ;
    }
    return 0;
}

输出如下:

Called from constructor: 3 4 5 2 
Called from main: 187072144 22084 5 2

有人可以告诉我错误发生在哪里吗?非常感谢你!

罗密欧

initializer_listconst不拥有任何元素(或延长其寿命)数组上的轻量级视图

当您编写时{{3, 4, 5, 2}, {7, 2, 3, 4}},您正在堆栈上创建矢量的临时数组-initializer_list基本上是指针+长度视图。构造完矩阵后,该数组将被销毁。

请使用诸如之类的容器vector代替initializer_list在您的matrix实现内部,以解决此问题。例如

private:
    vector<vector<int>>::iterator it;
    vector<vector<int>> matrix;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么索引值会发生变化?

来自分类Dev

通过将值从 int 更改为 float,总价值会发生变化 谁能解释为什么?求求你了

来自分类Dev

为什么在Java中调用setTimeout函数之前,我的值会发生变化?

来自分类Dev

为什么加入表后初始 COUNT 值会发生变化?

来自分类Dev

为什么在调用pop()之后top()的返回值会发生变化?

来自分类Dev

传递给c ++中的函数后,整数变量的值会发生变化

来自分类Dev

为什么Keras Dropout中的非零值会发生变化?

来自分类Dev

为什么使用生成器时const的值会发生变化?

来自分类Dev

为什么存储在内存位置的值会发生变化?

来自分类Dev

为什么从 onCLick onBindViewHolder 修改 RecyclerView 列表值会发生变化?

来自分类Dev

新手问题Python:为什么索引值会发生变化?

来自分类Dev

在scala spark中更改日期格式后列的值会发生变化

来自分类Dev

为什么遍历方阵时会发生变化?

来自分类Dev

为什么[0]会发生变化?

来自分类Dev

为什么“to”道具在点击时会发生变化?

来自分类Dev

当我从孩子那里调用它时 useState 值会发生变化

来自分类Dev

通过 Gmail 回复时,在 Gmail 中 In-Reply-To 值会发生变化

来自分类Dev

当单位从公制变为英制时,Openlayers 中的值会发生变化

来自分类Dev

堆栈中的代码本身会发生变化

来自分类Dev

当我将其写入文件时,为什么3D numpy数组中的值会发生变化?

来自分类Dev

为什么在以下给出的代码中用于xor操作的操作数中的值会发生变化?

来自分类Dev

为什么在 service.ts 中刷新页面时变量的值会发生变化?

来自分类Dev

当我在反应中设置其他对象的状态时,为什么我的数组值会发生变化?

来自分类Dev

为什么数组元素中的值发生变化?

来自分类Dev

为什么UIColor的值在序列化/反序列化后会发生变化?

来自分类Dev

为什么在“ vi”编辑器中进行编辑时inode值会发生变化?

来自分类Dev

向下传递包含数组的结构,为什么数组名的值会发生变化?

来自分类Dev

为什么我的按钮使用 React-icon 组件时返回值会发生变化?

来自分类Dev

传递到函数后列表值发生变化

Related 相关文章

  1. 1

    为什么索引值会发生变化?

  2. 2

    通过将值从 int 更改为 float,总价值会发生变化 谁能解释为什么?求求你了

  3. 3

    为什么在Java中调用setTimeout函数之前,我的值会发生变化?

  4. 4

    为什么加入表后初始 COUNT 值会发生变化?

  5. 5

    为什么在调用pop()之后top()的返回值会发生变化?

  6. 6

    传递给c ++中的函数后,整数变量的值会发生变化

  7. 7

    为什么Keras Dropout中的非零值会发生变化?

  8. 8

    为什么使用生成器时const的值会发生变化?

  9. 9

    为什么存储在内存位置的值会发生变化?

  10. 10

    为什么从 onCLick onBindViewHolder 修改 RecyclerView 列表值会发生变化?

  11. 11

    新手问题Python:为什么索引值会发生变化?

  12. 12

    在scala spark中更改日期格式后列的值会发生变化

  13. 13

    为什么遍历方阵时会发生变化?

  14. 14

    为什么[0]会发生变化?

  15. 15

    为什么“to”道具在点击时会发生变化?

  16. 16

    当我从孩子那里调用它时 useState 值会发生变化

  17. 17

    通过 Gmail 回复时,在 Gmail 中 In-Reply-To 值会发生变化

  18. 18

    当单位从公制变为英制时,Openlayers 中的值会发生变化

  19. 19

    堆栈中的代码本身会发生变化

  20. 20

    当我将其写入文件时,为什么3D numpy数组中的值会发生变化?

  21. 21

    为什么在以下给出的代码中用于xor操作的操作数中的值会发生变化?

  22. 22

    为什么在 service.ts 中刷新页面时变量的值会发生变化?

  23. 23

    当我在反应中设置其他对象的状态时,为什么我的数组值会发生变化?

  24. 24

    为什么数组元素中的值发生变化?

  25. 25

    为什么UIColor的值在序列化/反序列化后会发生变化?

  26. 26

    为什么在“ vi”编辑器中进行编辑时inode值会发生变化?

  27. 27

    向下传递包含数组的结构,为什么数组名的值会发生变化?

  28. 28

    为什么我的按钮使用 React-icon 组件时返回值会发生变化?

  29. 29

    传递到函数后列表值发生变化

热门标签

归档