我正在练习实施容器。我的目标是定义迭代器begin(),end()
以便我可以使用for(auto x : v). 我的容器看起来像这样:
class Vector{
public:
Vector(initializer_list<double> numbers){
sz = numbers.size();
elem = new double[sz];
int i = 0;
for (auto it = numbers.begin(); it!=numbers.end(); ++it)
elem[i++] = *it;
}
~Vector(){delete [] elem;}
double* begin();
double* end();
private:
double* elem;
int sz;
};
Run Code Online (Sandbox Code Playgroud)
选项1
这就是我定义迭代器的方式(它们在我的测试用例中工作得很好)
double* Vector::begin(){
return elem;
}
double* Vector::end(){
return &elem[sz];
}
Run Code Online (Sandbox Code Playgroud)
选项 2
这就是它们在A Tour of C++中的定义
double* Vector::begin(){
return &elem[0];
}
double* Vector::end(){
return &elem[0]+sz; …Run Code Online (Sandbox Code Playgroud) 我知道下面的代码块编译
#include<initializer_list>
int main()
{
std::initializer_list<int> li = {1,2,3,4};
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这也会编译
#include<iostream>
int main()
{
std::initializer_list<int> li = {1,2,3,4};
}
Run Code Online (Sandbox Code Playgroud)
被<initializer_list>列入<iostream>?根据this,它似乎不是。这可能是机器/编译器相关的东西吗?