当前位置:  开发笔记 > 编程语言 > 正文

为什么我的C++映射实现不存储值?

如何解决《为什么我的C++映射实现不存储值?》经验,为你挑选了1个好方法。

我有一个名为ImageMatrix的类,它以递归方式实现C++映射; 最终结果是我有一个3维数组.

typedef uint32_t VUInt32;
typedef int32_t VInt32;

class ImageMatrix
{
public:
    ImageMatrixRow operator[](VInt32 rowIndex)
private:
    ImageMatrixRowMap rows;
};

typedef std::map  ImageMatrixChannelMap;

class ImageMatrixColumn
{
public:
    VInt32 &operator[](VUInt32 channelIndex);
private:
    ImageMatrixChannelMap channels;
};

typedef std::map ImageMatrixColumnMap;

class ImageMatrixRow
{
public:
    ImageMatrixColumn operator[](VUInt32 columnIndex);
private:
    ImageMatrixColumnMap columns;
};

typedef std::map ImageMatrixRowMap;

每个运算符只返回一个map-wrapper类,如下所示:

ImageMatrixRow ImageMatrix::operator[](VInt32 rowIndex)
{
    return rows[rowIndex];
}

ImageMatrixColumn ImageMatrixRow::operator[](VUInt32 columnIndex)
{
    return columns[columnIndex];
}

VInt32 &ImageMatrixColumn::operator[](VUInt32 channelIndex)
{
    return channels[channelIndex];
}

基本上,当我将值设置为100,并将值测试为cout时,它显示为0,而不是我设置它的数字.

for (VUInt32 a = 0; a < GetRowCount(); a++)
{
    for (VUInt32 b = 0; b < GetColumnCount(); b++)
    {
        for (VUInt32 c = 0; c < GetChannelCount(); c++)
        {
            VInt32 value = 100;
            matrix[a][b][c] = value;

            VInt32 test = matrix[a][b][c];

                            // pixel = 100, test = 0 - why?
            cout << pixel << "/" << test << endl;
        }
    }
}

注意:我已经更改了此示例的原始代码,因此占用的空间更少,因此可能会出现一些语法错误(请不要指出它们).



1> dirkgently..:

以下运算符按值返回,没有写入修改实际数据.

ImageMatrixRow ImageMatrix::operator[](VInt32 rowIndex);

ImageMatrixColumn ImageMatrixRow::operator[](VUInt32 columnIndex);

使用:

ImageMatrixRow& ImageMatrix::operator[](VInt32 rowIndex)


ImageMatrixColumn& ImageMatrixRow::operator[](VUInt32 columnIndex)

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有