- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我已经创建了一个 DynamicArray 类并为它实现了一个迭代器。我的一个 .cpp 文件采用 n 长度的 DynamicArray 填充随机值,并且应该使用 STL 排序对其进行排序。但是,我已经修修补补了几个小时,每当尝试使用 begin() 和 end() 作为参数运行排序时,总是会遇到此错误:
no type named 'value_type' in 'struct std::iterator_traits<DynamicArray<double>::iterator>'
我将提供我的 DynamicArray 原型(prototype)以供引用:
template<class T>
class DynamicArray {
public:
static T dummy;
class iterator { // iterator for begin() and end() functions
private:
T* ptr;
public:
iterator() { ptr = NULL; } // constructor, sets pointer to NULL
iterator( T* p ) { ptr = p; } // parameterized constructor, sets pointer to data in DynamicArray
const T& operator*() const { return *ptr; } // pointer operator, returns pointer
void operator++() { if( ptr ) ptr++; } // pre-increment operator, increments pointer
void operator++( int ) { if( ptr ) ptr++; } // post-increment operator, increments pointer
bool operator!=( const iterator & other ) { return ptr != other.ptr; } // does not equal operator
};
private:
T* data;
bool* inUse;
unsigned int size;
unsigned int capacity;
public:
DynamicArray();
DynamicArray( const DynamicArray<T> & );
virtual ~DynamicArray();
DynamicArray<T> & operator=( const DynamicArray<T> & );
T operator[]( unsigned int index ) const;
T& operator[]( unsigned int index );
unsigned int getSize() const;
unsigned int getCapacity() const;
bool containsKey( unsigned int index ) const;
void deleteKey( unsigned int index );
iterator begin() const { return iterator( data ); }
iterator end() const { return iterator( data + size ); }
vector<unsigned int> keys() const;
void clear();
private:
void copy( const DynamicArray<T> & );
void deleteIt();
void setCapacity( unsigned int newCap = 10 );
};
这个错误是什么意思?我该如何解决?提前致谢。
最佳答案
您的迭代器不满足迭代器的 C++ 库要求。这不像简单地命名一个东西那么容易 iterator
, 为了创建一个迭代器。在 C++ 标准中,对迭代器的要求超过 30 页。
几乎在所有情况下,实现自定义迭代器的最简单方法是继承 std::iterator
模板。该模板采用两个必需参数和三个可选参数,以合成自定义迭代器的所有必需属性。
简要查看您的迭代器代码,在我看来您几乎可以支持前向迭代器的要求,因此请尝试从 std::iterator<std::forward_iterator_tag,T>
继承您的迭代器类.
我之所以说“差不多”是因为你的 operator++
运营商坏了。他们的返回值是错误的,后自增版本也是错误的。这可能会阻止您的迭代器使用 C++ 库中的某些算法正常工作,直到您修复此问题。但是您最大的问题是缺乏所需迭代器特征的实现。
关于c++ - 我正在尝试为我的 DynamicArray 类创建一个迭代器。为什么 STL 排序不适用于我的迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36095989/
我之前让 dll 注入(inject)器变得简单,但我有 Windows 7,我用 C# 和 C++ 做了它,它工作得很好!但是现在当我在 Windows 8 中尝试相同的代码时,它似乎没有以正确的方
我正在尝试制作一个名为 core-splitter 的元素,该元素在 1.0 中已弃用,因为它在我们的项目中起着关键作用。 如果您不知道 core-splitter 的作用,我可以提供一个简短的描述。
我有几个不同的蜘蛛,想一次运行所有它们。基于 this和 this ,我可以在同一个进程中运行多个蜘蛛。但是,我不知道如何设计一个信号系统来在所有蜘蛛都完成后停止 react 器。 我试过了: cra
有没有办法在达到特定条件时停止扭曲 react 器。例如,如果一个变量被设置为某个值,那么 react 器应该停止吗? 最佳答案 理想情况下,您不会将变量设置为一个值并停止 react 器,而是调用
https://code.angularjs.org/1.0.0rc9/angular-1.0.0rc9.js 上面的链接定义了外部js文件,我不知道Angular-1.0.0rc9.js的注入(in
我正在尝试运行一个函数并将服务注入(inject)其中。我认为这可以使用 $injector 轻松完成.所以我尝试了以下(简化示例): angular.injector().invoke( [ "$q
在 google Guice 中,我可以使用函数 createInjector 创建基于多个模块的注入(inject)器。 因为我使用 GWT.create 在 GoogleGin 中实例化注入(in
我在 ASP.NET Core 1.1 解决方案中使用配置绑定(bind)。基本上,我在“ConfigureServices Startup”部分中有一些用于绑定(bind)的简单代码,如下所示: s
我在 Spring MVC 中设置 initBinder 时遇到一些问题。我有一个 ModelAttribute,它有一个有时会显示的字段。 public class Model { privat
我正在尝试通过jquery post发布knockoutjs View 模型 var $form = $('#barcodeTemplate form'); var data = ko.toJS(vm
如何为包含多态对象集合的复杂模型编写自定义模型绑定(bind)程序? 我有下一个模型结构: public class CustomAttributeValueViewModel { publi
您好,我正在尝试实现我在 this article 中找到的扩展方法对于简单的注入(inject)器,因为它不支持开箱即用的特定构造函数的注册。 根据这篇文章,我需要用一个假的委托(delegate)
你好,我想自动注册我的依赖项。 我现在拥有的是: public interface IRepository where T : class public interface IFolderReposi
我正在使用 Jasmine 测试一些 Angular.js 代码。为此,我需要一个 Angular 注入(inject)器: var injector = angular.injector(['ng'
我正在使用 Matlab 代码生成器。不可能包含代码风格指南。这就是为什么我正在寻找一个工具来“ reshape ”、重命名和重新格式化生成的代码,根据我的: 功能横幅约定 文件横幅约定 命名约定 等
这个问题在这里已经有了答案: Where and why do I have to put the "template" and "typename" keywords? (8 个答案) 关闭 8
我开发了一种工具,可以更改某些程序的外观。为此,我需要在某些进程中注入(inject)一个 dll。 现在我基本上使用这个 approach .问题通常是人们无法注入(inject) dll,因为他们
我想使用 swing、spring 和 hibernate 编写一个 java 应用程序。 我想使用数据绑定(bind)器用 bean 的值填充 gui,并且我还希望它反射(reflect) gui
我有这段代码,当两个蜘蛛完成后,程序仍在运行。 #!C:\Python27\python.exe from twisted.internet import reactor from scrapy.cr
要点是 Spring Batch (v2) 测试框架具有带有 @Autowired 注释的 JobLauncherTestUtils.setJob。我们的测试套件有多个 Job 类提供者。因为这个类不
我是一名优秀的程序员,十分优秀!