小编iam*_*gan的帖子

容器的 begin() 和 end() 的不同实现

我正在练习实施容器。我的目标是定义迭代器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)

c++ containers iterator

4
推荐指数
1
解决办法
96
查看次数

&lt;initializer_list&gt; 是否包含在 &lt;iostream&gt; 中?

我知道下面的代码块编译

#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,它似乎不是。这可能是机器/编译器相关的东西吗?

c++ iostream initializer-list

0
推荐指数
1
解决办法
42
查看次数

标签 统计

c++ ×2

containers ×1

initializer-list ×1

iostream ×1

iterator ×1