STL reverse_iterator errors
STL reverse_iterator errors
我正在尝试使用该算法来构建一棵霍夫曼树,并且我已经达到了某些方式的终点。我首先将字符串作为用户输入,然后找到输入的实际位表示,以与压缩位序列进行比较。然后,我使用STD :: MAP将字母映射到它们的频率。现在,我要做的是,获取反向迭代器,然后将键值插入霍夫曼树中的节点。但是我在迭代器部分中有很多错误列表。
#include <iostream>
#include <stdio.h>
#include <string>
#include <string.h>
#include <map>
#include <bitset>
#include <iterator>
#include <algorithm>
#include "htree.cpp"
// utility function to calculate the occurence of 'ith' letter //
const int countChar(const std::string& istring, char key) {
int n = istring.length(); int iCount = 0;
for(int i = 0; i < n; ++i) if(istring[i] == key) iCount++;
return iCount;
}
// calculates and stores the frequency of each letter in string //
void calcFreq(std::map<char, int>& fMap, const std::string& istring) {
int n = istring.length();
for(int i = 0; i < n; ++i) {
fMap.insert(std::pair <char, int> (istring[i],
countChar(istring,istring[i])));
}
}
//prints the binary representation of the input string //
const void bitRep(const std::string& istring) {
for(std::size_t i = 0; i < istring.size(); ++i)
std::cout<<std::bitset<8>(istring[i]);
}
int main() {
std::string istring;
getline(std::cin, istring);
std::cout<<"n Bit Representation: n";
bitRep(istring);
std::cout<<std::endl;
std::map <char, int> fMap;
std::map<char, int>::iterator it;
calcFreq(fMap, istring);
std::cout<<"tCHARtVALUEn";
for(it = fMap.begin(); it != fMap.end(); ++it)
std::cout<<'t'<<it->first<<'t'<<it->second<<'n';
// auto i = fMap.rbegin();
std::map<char, int>::const_reverse_iterator i = fMap.rbegin();
Node* node = (Node*)malloc(sizeof(Node));
while(i != fMap.rend()) {
for(std::map<char, int>::const_reverse_iterator j = i; j != i + 2; j++)
node = newNode(j->first, j->second);
std::advance(i,2);
}
return 0;
}
我得到了下面列出的不可读错误列表。我真的不知道我做错了什么,而且我已经过去了一天。帮助您将不胜感激。
λ g++ HAL.cpp
In file included from c:mingwlibgccmingw326.3.0includec++bitsstl_algobase.h:67:0,
from c:mingwlibgccmingw326.3.0includec++bitschar_traits.h:39,
from c:mingwlibgccmingw326.3.0includec++ios:40,
from c:mingwlibgccmingw326.3.0includec++ostream:38,
from c:mingwlibgccmingw326.3.0includec++iostream:39,
from HAL.cpp:1:
c:mingwlibgccmingw326.3.0includec++bitsstl_iterator.h: In instantiation of 'std::reverse_iterator<_Iterator> std::reverse_iterator<_Iterator>::operator+(std::reverse_iterator<_Iterator>::difference_type) const [with _Iterator = std::_Rb_tree_const_iterator<std::pair<const char, int> >; std::reverse_iterator<_Iterator>::difference_type = int]':
HAL.cpp:52:69: required from here
c:mingwlibgccmingw326.3.0includec++bitsstl_iterator.h:233:41: error: no match for 'operator-' (operand types are 'const std::_Rb_tree_const_iterator<std::pair<const char, int> >' and 'std::reverse_iterator<std::_Rb_tree_const_iterator<std::pair<const char, int> > >::difference_type {aka int}')
{ return reverse_iterator(current - __n); }
~~~~~~~~^~~~~
c:mingwlibgccmingw326.3.0includec++bitsstl_iterator.h:333:5: note: candidate: template<class _Iterator> decltype ((__x.base() - __y.base())) std::operator-(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)
operator-(const reverse_iterator<_Iterator>& __x,
^~~~~~~~
c:mingwlibgccmingw326.3.0includec++bitsstl_iterator.h:333:5: note: template argument deduction/substitution failed:
c:mingwlibgccmingw326.3.0includec++bitsstl_iterator.h:233:41: note: 'const std::_Rb_tree_const_iterator<std::pair<const char, int> >' is not derived from 'const std::reverse_iterator<_Iterator>'
{ return reverse_iterator(current - __n); }
~~~~~~~~^~~~~
c:mingwlibgccmingw326.3.0includec++bitsstl_iterator.h:387:5: note: candidate: template<class _IteratorL, class _IteratorR> decltype ((__y.base() - __x.base())) std::operator-(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_IteratorR>&)
operator-(const reverse_iterator<_IteratorL>& __x,
^~~~~~~~
c:mingwlibgccmingw326.3.0includec++bitsstl_iterator.h:387:5: note: template argument deduction/substitution failed:
c:mingwlibgccmingw326.3.0includec++bitsstl_iterator.h:233:41: note: 'const std::_Rb_tree_const_iterator<std::pair<const char, int> >' is not derived from 'const std::reverse_iterator<_Iterator>'
{ return reverse_iterator(current - __n); }
~~~~~~~~^~~~~
c:mingwlibgccmingw326.3.0includec++bitsstl_iterator.h:1186:5: note: candidate: template<class _IteratorL, class _IteratorR> decltype ((__x.base() - __y.base())) std::operator-(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorR>&)
operator-(const move_iterator<_IteratorL>& __x,
^~~~~~~~
c:mingwlibgccmingw326.3.0includec++bitsstl_iterator.h:1186:5: note: template argument deduction/substitution failed:
c:mingwlibgccmingw326.3.0includec++bitsstl_iterator.h:233:41: note: 'const std::_Rb_tree_const_iterator<std::pair<const char, int> >' is not derived from 'const std::move_iterator<_IteratorL>'
{ return reverse_iterator(current - __n); }
~~~~~~~~^~~~~
c:mingwlibgccmingw326.3.0includec++bitsstl_iterator.h:1193:5: note: candidate: template<class _Iterator> decltype ((__x.base() - __y.base())) std::operator-(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorL>&)
operator-(const move_iterator<_Iterator>& __x,
^~~~~~~~
c:mingwlibgccmingw326.3.0includec++bitsstl_iterator.h:1193:5: note: template argument deduction/substitution failed:
c:mingwlibgccmingw326.3.0includec++bitsstl_iterator.h:233:41: note: 'const std::_Rb_tree_const_iterator<std::pair<const char, int> >' is not derived from 'const std::move_iterator<_IteratorL>'
{ return reverse_iterator(current - __n); }
和顺便说一句,newNode的函数声明在另一个文件中:
Node* newNode(char data, int freq);
这是导致错误的代码:
for(std::map<char, int>::const_reverse_iterator j = i; j != i + 2; j++)
node = newNode(j->first, j->second);
您不能使用i 2,因为迭代器没有操作员 ,您可以像:
一样更改它std::map<char, int>::const_reverse_iterator y = i;
std::advance(y,2);
for(std::map<char, int>::const_reverse_iterator j = i; j != y; j++)
相关文章:
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 在调试模式下引发C++ "deque iterator not dereferencable"异常
- std::iterator::reference 必须是引用吗?
- 为什么unordered_set<string::iterator>不起作用?
- 造成致命错误:boost/fusion/iterator/equal_to.hpp 没有这样的文件或目录
- Visual accept std::string from std::byte iterator
- 什么是"std::set<int,int>::iterator"?
- 从 std::vector 中删除项目时"Iterator not incrementable"
- 如何从 boost::container::vector<std::string>::iterator 访问索引和对象?
- 空集"Out of bound iterator"
- 如何使用set<pair<int,int> >::iterator itrator it迭代set<pair<int,int> >st中的值?
- 给定一个类型为 Container:<T>:Iterator 的函数参数,如何为某些类型的 T 实现特定的重载?
- 带升压async_read_some "String iterator not dereferncable"
- C++为什么"deque iterator not dereferencable "
- LNK2005 AND LNK1169 Errors - C++
- 错误:与'operator='不匹配(操作数类型为"std::map<int、double>::iterator
- C++ errors - C4819, C2761, C2447
- 自动,错误:MAP ITERATOR没有名为“ First”的成员
- set<shared_ptr<T>>::iterator to set<shared_ptr<t const>>::const_iterator
- 标准::复制失败,"cannot seek vector iterator after end"