-1

我正在创建一个字符串类(项目学校),我一直到最后为它创建迭代器,所以我的问题是我不知道从哪里开始我认为开始和结束但它们是如何实现的。这是到目前为止的代码:

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;

}
}

我有这个类我如何实现迭代器开始()。谢谢。

4

2 回答 2

0

首先,您不想通过引用返回迭代器。按值返回它们。

迭代器就像指向集合元素的指针(在您的情况下指向字符串中的字符)。实现它们的一种方法是只typedef char *stringIte;使用原始指针作为迭代器(它们提供所有必要的功能)。begin()然后将返回dataend()返回data + size(假设data是指向字符串数据的指针,并且size是它的长度,没有终止NUL.

一种更奇特的方式可能是一个简单的结构,例如可以包含 aStringTest*和 an int,并在取消引用时从字符串中返回适当的字符。

于 2012-12-04T13:06:27.820 回答
0

你已经有了operator[]。最简单的解决方案是让迭代器维护一个指向StringTest 对象的指针和一个索引,并让它[]在需要时使用字符串上的运算符。这还有一个额外的优势,因为它可以轻松检查错误。

如果迭代器知道字符串类的一些内部信息,则可能实现更有效的实现。例如,如果实际字符位于连续数组中,则迭代器可以由单个指针组成(甚至是指向 的 typedef char*)。

于 2012-12-04T13:09:39.077 回答