Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 基于范围的for和devque vs vector_C++_Stl_Containers - Fatal编程技术网

C++ 基于范围的for和devque vs vector

C++ 基于范围的for和devque vs vector,c++,stl,containers,C++,Stl,Containers,我有一个类,其内部在容器中保存指向其自身类型的指针,如下所示: class A { public: A(int x) : _data(x){} A ** begin() { return v.empty() ? nullptr : &v[0]; } A ** end() { return v.empty() ? nullptr : &v[0] + v.size(); } voi

我有一个类,其内部在容器中保存指向其自身类型的指针,如下所示:

class A
{
public:

    A(int x) : _data(x){}

    A ** begin()
    {
        return v.empty() ? nullptr : &v[0];
    }

    A ** end()
    {
        return v.empty() ? nullptr : &v[0] + v.size();
    }

    void Display()
    {
        cout << "Data = " << _data << endl;
    }

    vector<A *> v;

private:

    int _data;
};
A类
{
公众:
A(intx):_data(x){}
A**begin()
{
返回v.empty()?nullptr:&v[0];
}
(完)
{
返回v.empty()?nullptr:&v[0]+v.size();
}
无效显示()
{

cout与
std::vector
不同,
std::deque
不能保证它连续存储其元素。因此,在一般情况下,指针算法不会做正确的事情。如果您想使用deque,而不是向其中返回指针,则应该返回迭代器

如果您确实希望将deque作为公共成员,那么直接返回
std::deque::iterator

std::deque<A*>::iterator begin()
{
    return v.begin();
}

std::deque<A*>::iterator end()
{
    return v.end();
}

std::vector
不同,
std::deque
不保证它连续存储其元素。因此,在一般情况下,指针算法不会做正确的事情。如果您想使用deque,而不是向其中返回指针,则应返回迭代器

如果您确实希望将deque作为公共成员,那么直接返回
std::deque::iterator

std::deque<A*>::iterator begin()
{
    return v.begin();
}

std::deque<A*>::iterator end()
{
    return v.end();
}