如何替换结构体c++

How to replace struct c++

本文关键字:结构体 c++ 替换 何替换      更新时间:2023-10-16

我有以下结构

struct LetterFreq{
  char letter;
  double freq;
};

现在我正试图创建一个std:列表,列出这些。。。

std::list<LetterFreq> freqList;
LetterFreq f = {'A',.08167};
freqList.push_back(f);
f =  {'B',.01492};
freqList.push_back(f);

然而,当我尝试编译时,我会。。。

error: expected expression

如果我换成。。。

std::list<LetterFreq> freqList;
LetterFreq f = {'A',.08167};
freqList.push_back(f);
LetterFreq f2 =  {'B',.01492};
freqList.push_back(f2);

它看起来很管用,但我真的不想那样。我宁愿重用变量f

如果您有C++11可用,您可以使用:

std::list<LetterFreq> freqList;
freqList.emplace_back('A', .08167);
freqList.emplace_back('B', .01492);

或者更好的是,使用这样的初始值设定项列表:

std::list<LetterFreq> freqList { {'A', .08167}, {'B', .01492} };

如果没有C++11,您可以执行以下操作:

struct LetterFreq{
  char letter;
  double freq;
  LetterFreq(char letter, double freq)
  : letter(letter), freq(freq)
  {}
};
f =  LetterFreq('B',.01492);

您所陷入的陷阱是,初始化程序列表是用构造函数完成的。在第二个例子中,因为每次都要创建新的对象(而不是现有的对象),所以编译器会调用带有初始化器列表的构造函数。

在您的第一个示例中,它必须调用赋值运算符,该运算符不支持初始化器列表,而且实际上也不应该:)