首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::istream& operator>>(std::istream&,ClassName& )

std::istream& operator>>(std::istream&,ClassName& )
EN

Stack Overflow用户
提问于 2018-11-26 14:53:47
回答 1查看 839关注 0票数 4

我在网上查了一下,但找不到合适的东西。

如何才能有这样的主(原始主):

代码语言:javascript
复制
 int main()
    {
        Image left;
        std::ifstream ifs("left.txt");
        ifs >> left;
        ifs.close();
        waitForKey("cout << left");
        std::cout << left;
    }

试着像这样(我的解码):

代码语言:javascript
复制
//m_pixel is a member that holds a single char
//m_H = height
//m_W = width
std::istream& operator>>(std::istream& is, ClassName& image)
{
    image.m_pixel = new Pixel*[image.m_H];

    for (int i = 0; i < image.m_H; i++)
        image.m_pixel[i] = new Pixel[image.m_W];
}

例如,如果我不知道图像的高度和宽度,我应该如何将“is”插入到图像中?我怎么能认识他们?如何在图像中插入“is”的字符?简而言之,如何解码这段代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-26 14:57:21

显然,当您转储图像时,您需要从转储大小开始:

代码语言:javascript
复制
std::ostream& operator<<(std::ostream& os, ClassName& image)
{
    os << image.m_H << " " << image.m_W;
    // Dump the rest as before
    return os;
}

然后再读一遍,然后再读剩下的数据:

代码语言:javascript
复制
std::istream& operator>>(std::istream& is, ClassName& image)
{
    is >> image.m_H >> image.m_W;
    image.m_pixel = new Pixel*[image.m_H];

    for (int i = 0; i < image.m_H; ++i)
    {
        image.m_pixel[i] = new Pixel[image.m_W];
        for (int j = 0; j < image.m_W; ++j)
        {
             is >> image.m_pixel[i][j];
        }
    }
    return is;
}

但正如@NathanOliver所说,使用std::vector<Pixel>

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53483738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档