我有一些代码可以获得最常用的单词并将它们放入向量中。然后我将矢量按数字顺序排序,这一切都很好。然后我尝试将向量调整为10,这样我就可以得到前十个我想要按字词排序的内容。
我认为问题在于我的部分结构,但我不确定这是我正在使用的代码。
struct wordFreq
{
string word;
int count;
wordFreq(string str, int c): word(str),count(c) { }
};
words.resize(10);
任何帮助将不胜感激。
答案 0 :(得分:3)
调整向量大小时,函数resize
需要知道新元素的值。因此,通话
words.resize(10);
包含wordFreq()
形式的默认参数,在您的情况下无效,因为类wordFreq
没有默认构造函数。
如果没有创建新元素,请使用erase
代替resize
。
words.erase(words.begin() + 10, words.end());
答案 1 :(得分:1)
由于您正在使用vector::resize
向量尝试使用10
类的默认ctor 创建wordFreq
对象。由于没有可用的默认ctor,因此会出现编译器错误。对于您提及的情况,不需要使用resize
方法,您可以简单地遍历1..10
以使用前10个元素,因为您已经对矢量进行了排序。
答案 2 :(得分:0)
您需要创建一个默认构造函数,因为vector使用它为新元素腾出空间。
wordFreq() : word(""), count(0) { }
答案 3 :(得分:0)
vector::resize
函数要求项具有不带参数的构造函数(默认构造函数)。请参阅MSDN page中的“容器元素要求”部分。句子“对容器的某些操作可能还需要公共默认构造函数”与vector::resize
相关。