小编Mic*_*ick的帖子

reverse_iterator适配器

我正在尝试为我的迭代器和const_iterator类实现一个反向迭代器适配器,但有点麻烦.如果有人能指导我完成这一点,那将非常感激!

我的想法是我应该能够从我的rbegin()和rend()函数调用中创建一个反向迭代器

reverse_iterator rbegin();
reverse_iterator rend();
const_reverse_iterator rbegin() const;
const_reverse_iterator rend() const;
Run Code Online (Sandbox Code Playgroud)

我在课堂上使用以下typedef:

typedef btree_iterator<T> iterator;
typedef const_btree_iterator<T> const_iterator;
typedef reverse_btree_iterator<iterator> reverse_iterator;
typedef reverse_btree_iterator<const_iterator> const_reverse_iterator;
Run Code Online (Sandbox Code Playgroud)

如您所见,我希望能够使用模板创建反向迭代器,为reverse_iterator类提供迭代器或const_iterator.

不幸的是,有点我坚持......

下面是我目前拥有的类定义,但有错误.

template <typename I> class reverse_btree_iterator {

  typedef ptrdiff_t                     difference_type;
  typedef bidirectional_iterator_tag    iterator_category;

public:

  reverse_btree_iterator() : base_(I()) {}
  template <typename T> reverse_btree_iterator(const btree_iterator<T>& rhs) : base_(rhs) {}

  I base() { return base_; }

  I::reference operator*() const;
  I::pointer operator->() const;
  I& operator++();
  I operator++(int);
  I& operator--();
  I operator--(int);
  bool operator==(const I& other) const;
  bool …
Run Code Online (Sandbox Code Playgroud)

c++ iterator b-tree adapter const-iterator

7
推荐指数
1
解决办法
1235
查看次数

在数据库中存储考试问题

我一直在考虑如何设计一个数据库,以便在一年多的时间内保持考试问题(开启和关闭,主要是关闭).

首先,简要介绍一下我所追求的内容.我想设计一个足够灵活的数据库来存储不同的问题类型(例如,简短回答或多项选择问题),并且能够选择任意数量的这些问题作为考试存储.

我的问题是:

如何存储考试题?

由于不同的问题类型需要存储不同的字段,如果我将它们全部放在同一个表中questions,将会有许多从未使用过的额外字段.

如果我将问题类型分成不同的表,那么将question_id存储在某个exam_questions表中将会困难得多,因为它们将来自不同的表.

我也想不出一种灵活的方式来存储信息.

例如,

questions
 - id
 - question
 - type (multiple choice, short response)
 - choice_1 ( used for multiple choice questions)
 - choice_2
 - choice_3
 - choice_4
 - choice_5
 - answer (short response answer here, or just a/b/c/d/e for multiple choice, t/f for true or false)
Run Code Online (Sandbox Code Playgroud)

这样的设计会被推荐吗?如果没有,有没有人有任何建议?

我还有另一个问题:

如果我想将学生的答案存储到这些考试中,那么将它们存储起来效率是否低效?

exam_responses
  - id
  - student_id
  - exam_id
  - question_id or question_number
  - response
  - mark
Run Code Online (Sandbox Code Playgroud)

先感谢您.如果您想要任何其他信息,或者此问题有任何问题,请给我留言,我会尽快修复.

sql database database-design database-schema

7
推荐指数
1
解决办法
1万
查看次数

C++中意外的指针行为

我的C++指针存在问题,如果有人能够与我分享他们的专业知识,那就太棒了!

我得到的输出是:

1:
2:
END: C
1:C
2:E
END: E
Run Code Online (Sandbox Code Playgroud)

我期待的输出是:

1:
2:
END: C
1:C
2:C
END: E
Run Code Online (Sandbox Code Playgroud)

相关代码是这样的:

我的test.cpp

tree.insert('C');
tree.insert('E');
Run Code Online (Sandbox Code Playgroud)

插入功能:

template <typename T> pair<typename btree<T>::iterator, bool> btree<T>::insert(const T& elem) {
  cout <<  "1:" << this->rbegin_->value() << endl;
  btree_node<T> node(elem);
  cout <<  "2:" << this->rbegin_->value() << endl;
  rbegin_ = &node;
  iterator itr;
  pair<typename btree<T>::iterator, bool> p(itr, false);
  cout << "END: " << this->rbegin_->value() << endl;
  return p;
}
Run Code Online (Sandbox Code Playgroud)

btree_node的构造函数(基本上是空的):

template <typename T> btree_node<T>::btree_node(const T& elem) : value_(elem), …
Run Code Online (Sandbox Code Playgroud)

c++ pointers b-tree

6
推荐指数
1
解决办法
150
查看次数

迭代器中的C++后增量运算符重载(使用-Wall -Werror进行编译)

我正在为一个b树创建自己的迭代器,而且我一直坚持如何在没有编译器抱怨的情况下实现后增量运算符.

错误消息如下所示,并且是预期的(因为我正在做错误消息所说的)

cc1plus: warnings being treated as errors
error: reference to local variable 'temp' returned
Run Code Online (Sandbox Code Playgroud)

我需要使用-Wall和-Werror标记编写函数,所以希望有人能够帮助我解决这个问题.

这是功能:

template <typename T> btree_iterator<T>& btree_iterator<T>::operator++(int) {

  btree_iterator<T> temp(*this);
  pointee_ = pointee_->nextNode();
  return temp;
}
Run Code Online (Sandbox Code Playgroud)

我环顾四周,我只能找到人们实现操作员的例子.

每当我以前遇到这样的问题时,我'新'了我正在返回的对象,以便它不再是临时的.但由于这是一个迭代器,如果我这样做,我将无法释放内存,从而导致内存泄漏.

如果有人能够帮助我,那将非常感谢!如果我的设计还有其他任何可以帮助您理解问题的信息,请告诉我.

问候.

c++ iterator b-tree operator-overloading post-increment

3
推荐指数
1
解决办法
636
查看次数