C++ 转换为基本for循环

C++ 转换为基本for循环,c++,queue,priority-queue,huffman-code,C++,Queue,Priority Queue,Huffman Code,有人能帮我理解这个for循环并把它转换成我习惯的基本形式吗 我们被给予 for(vector<CFreq>::iterator it = frequencies.begin(); it != frequencies.end(); i++) { HuffmanTree *node = new HuffmanTree(it->c, it->freq); queue.push(node); } for(vector::iterator it=frequencies.begi

有人能帮我理解这个for循环并把它转换成我习惯的基本形式吗

我们被给予

for(vector<CFreq>::iterator it = frequencies.begin(); it != frequencies.end(); i++) 
{
HuffmanTree *node = new HuffmanTree(it->c, it->freq);
queue.push(node);
}
for(vector::iterator it=frequencies.begin();it!=frequencies.end();i++)
{
HuffmanTree*节点=新建HuffmanTree(it->c,it->freq);
队列推送(节点);
}

谢谢

您可以将循环编写为基于范围的循环,如下所示:

for (const CFreq& f : frequencies) {
  queue.push(new HuffmanTree(f.c, f.freq));
}

如果通过索引访问向量表示循环,可以尝试以下方法:

for(size_t i = 0; i < frequencies.size(); i++) {
   queue.push(new HuffmanTree(frequencies[i].c, frequencies[i].freq));
}
for(size_t i=0;i
事实上,没有比这更基本的了。习惯吧,我想。把它转换成我习惯的基本形式——我们不知道“你习惯了什么”。在任何情况下,每个C++程序员都应该能够很容易地理解循环没有问题。尝试理解这个循环,并试图把它转换成一个更熟悉的形式(我想是<代码>(int i=0;iCik 1)<代码> int i <代码>应该是代码> siZigit i < /代码> 2)不需要<代码>节点= < /Cord>,只是代码>队列推送。(新赫夫曼树(频率[i].c,频率[i].freq))@PaulMcKenzie,出于好奇,在推之前声明指针变量不好吗?缺点是什么?@Splatted,我更喜欢上面Kerrek的答案。简单得多。@codekaizer:变量通常是不好的,因为如果有变化,你需要考虑它。变量越少,思考的事情就越少。(在这个思维过程的最末端,你有函数式编程,没有任何变化。)@KerrekSB,没错。这也是我的经验法则。直接将所有
new
命令作为函数的参数是否是一个好的做法?比如:
func(new a(),new B(),new C())
?我得到一个错误,说“vector”没有名为c的成员,也没有名为freq的成员。我如何解决这个问题?@Splatted:您确定键入的是正确的,并且您没有说
frequencies
而不是
f