c++ - 检索C++ vector 中的第一个元素

标签 c++ vector iterator std

我编写了一个包装器类,以对类型 vector 执行插入/删除操作。
编码:

class GenericSymbolTable {
   public:
       virtual void pushBackAtom(Atom *atom) = 0;
       virtual Atom* peekAtom(void) = 0;
       virtual Atom* getAtom(void) = 0;

   protected:
      ~GenericSymbolTable(void){}
};

class SymbolTable : public GenericSymbolTable {
   private:
       vector<Atom*> atoms;

   protected:
       ~SymbolTable(void);

   public:
       void pushBackAtom(Atom *atom);
       Atom* peekAtom(void);
       Atom* getAtom(void);
};

在为这些方法编写实现时,编译器会引发冲突的类型错误:
   Atom* SymbolTable::peekAtom(void) {
      if(atoms.empty()) {
          cout << "\t[W] Simbol table does not contain any atoms" << endl;
          return NULL;
      }

      Atom* first = atoms.begin(); // <== type error
      return first;
   }

   Atom* SymbolTable::getAtom(void) {
      if(atoms.empty()) {
          cout << "\t[W] Simbol table does not contain any atoms" << endl;
          return NULL;
      }

      Atom* first = atoms.begin(); // <== type error
      atoms.erase(atoms.begin());
      return first;
   }

错误消息:
初始化时无法将“std::vector::iterator {aka __gnu_cxx::__ normal_iterator>}”转换为“Atom *”

最佳答案

  Atom* first = atoms.begin(); // <== type error

这将first设置为等于迭代器。您想将其设置为等于迭代器指向的对象。尝试:
  Atom* first = *(atoms.begin());

要么:
  Atom* first = atoms.front();

由于这是Atom*的 vector ,因此其迭代器指向Atom*

关于c++ - 检索C++ vector 中的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12652997/

相关文章:

c++ - 将特征矩阵转换为 std::vector<std::array<>> 形式

r - 在 R 中获取迭代器的索引(与 foreach 并行)

c++ - 计算 vector 中单词的出现次数

c++ - 哈希表桶实现

c++ - 返回迭代器与松散耦合

python - 在枚举 python 中包含停止参数的最简单方法?

c++ - 为什么这会导致模棱两可的模板错误?

c++ - 为什么最小 MFC 项目在 Visual Studio 2013 上有链接错误?

c++ - 使用 Boost 查找大图的连接组件

c++ - OpenCV 错误:断言在 cv::Mat 行 522 中失败