我有一个问题。我需要实现我自己的方法开始和结束迭代与for循环通过数组。但我不太确定该怎么做。我写的代码如下
template <typename T>
class container {
public:
size_t n;
T *p;
container(std::initializer_list<T> L) {
int i = 0;
n = L.size();
p = new T[n];
for(auto element : L) {
p[i] = element;
i++;
}
}
T getArray() {
return *p;
}
T *begin(container<T> &cref);
T *end(container<T> &cref);
~container() { delete[] p; }
T &operator[](size_t k) { return p[k]; }
void info() {
std::cout << "Ilość elementów w tablicy: " << n << "n";
for(const char& c : p)
{
std::cout << c << std::endl;
}
std::cout << "Typ danych: " << typeid(*p).name() << 'n';
};
size_t length() const { return n; }
};
template <typename T>
T* container<T>::begin(container<T> &cref) {
return cref.getArray()[0];
}
template <typename T>
T* container<T>::end(container<T> &cref) {
return cref.getArray()[0 + cref.length()];
}
int main(int argc, char** argv) {
container<char> Z{'a', 'b', 'c', 'd'};
Z.info();
std::cout << Z.length();
return 0;
}
谁能告诉我怎么做,并像这样使用for循环迭代器:
for(const char& c : p)
{
std::cout << c << std::endl;
}
T
为元素类型;p
是指向第一个数组元素的指针,begin
和end
不应该接受参数(您将迭代*this
)。
你想要的
T* getArray() { return p; }
和
template <typename T>
T* container<T>::begin() {
return p;
}
template <typename T>
T* container<T>::end() {
return p + length();
}