我正在创建一个字符串类(项目学校),我到最后为它创建迭代器,所以我的问题是我不知道从哪里开始我认为开始和结束但是如何实现。这是目前为止的代码:
class StringsTest {
public:
std::tr1::shared_ptr<char* > word;
char* data;
int size;
int final;
int itSize;
StringsTest();
StringsTest(const StringsTest& orig);
virtual ~StringsTest();
StringsTest(char* strings);
StringsTest& swap( StringsTest& str2 );
int push_back(char a);
char pop_back();
int insert(int where, char what);
int erase(int where);
friend void operator<<(std::ostream& Ostr, const StringsTest& st);
friend std::istream& operator>>(std::istream& Istr, StringsTest& st);
char &operator[](int i);
int sizes();
int check();
stringIte& begin();
stringIte& end();
private:
protected:
};
#endif /* STRINGPROJ_H *
//#endif /* STRINGSTEST_H */
class stringIte {
public:
stringIte();
~stringIte();
开始:
stringIte& StringsTest::begin() {
try {
} catch (std::exception e) {
std::cout << " an error has ocurred " << e.what() << std::endl;
}
}
stringIte& StringsTest::end() {
try {
} catch (std::exception e) {
std::cout << "nope " << e.what() << std::endl;
}
}
我有这个类如何实现迭代器begin()。感谢。
答案 0 :(得分:0)
首先,您不希望通过引用返回迭代器。按价值归还。
迭代器就像指向集合元素的指针(对于字符串中的字符,在您的情况下)。实现它们的一种方法是只执行typedef char *stringIte;
并使用原始指针作为迭代器(它们提供所有必需的功能)。然后begin()
会返回data
而end()
将返回data + size
(假设data
是指向字符串数据的指针,而size
是其长度,而不是终止NUL
。
更奇特的方式可能是一个简单的结构,例如,包含StringTest*
和int
,并在derefernce中返回字符串中的相应字符。
答案 1 :(得分:0)
您已经拥有operator[]
。最简单的解决方案是
为迭代器维护指向StringTest
的指针
对象和索引,让它使用[]
运算符
字符串何时需要。这具有额外的优势
允许轻松检查错误。
如果是迭代器,则可以实现更高效的实现
知道字符串类的内部结构。如果
实际字符在一个连续的数组中,例如,
迭代器可以由单个指针组成(甚至可以是typedef
到char*
)。