相关疑难解决方法(0)

C++ std :: vector <> :: iterator不是指针,为什么?

只需一点介绍,简单的单词.在C++中,迭代器是"事物",你可以在其上至少编写解引用运算符*it,增量运算符++it,对于更高级的双向迭代器,减量--it,最后但并非最不重要的是,对于随机访问迭代器,我们需要运算符索引it[]和可能的加法和减法.

C++中的这类"东西"是具有相应运算符重载的类型的对象,或简单和简单的指针.

std::vector<>是一个包装连续数组的容器类,因此指针作为迭代器是有意义的.在网上,在一些文献中你可以找到vector.begin()用作指针.

使用指针的基本原理是开销更少,性能更高,特别是如果优化编译器检测到迭代并执行其操作(向量指令和内容).使用迭代器可能更难以使编译器进行优化.

知道这一点,我的问题是为什么现代STL实现,比如Mingw 4.7中的MSVC++ 2013或libstdc ++,为矢量迭代器使用了一个特殊的类?

c++ iterator vector stdvector

21
推荐指数
3
解决办法
3348
查看次数

对于具有线性存储的容器,是否可以使用原始指针代替具有STL算法的迭代器?

我有一个自定义矢量容器,内部存储项目线性数组.昨晚,我试图为我的类实现自定义迭代器,以便能够将它们与STL算法一起使用.我在这里看到了一些成功:

使用自定义迭代器的实例

在这样做时,我发现我只能将原始指针传递给STL算法,它们似乎工作得很好.这是没有任何迭代器的示例:

#include <cstddef>
#include <iostream>
#include <iterator>
#include <algorithm>

template<typename T>
class my_array{
    T* data_;
    std::size_t size_;

public:

    my_array()
        : data_(NULL), size_(0)
    {}
    my_array(std::size_t size)
        : data_(new T[size]), size_(size)
    {}
    my_array(const my_array<T>& other){
        size_ = other.size_;
        data_ = new T[size_];
        for (std::size_t i = 0; i<size_; i++)
            data_[i] = other.data_[i];
    }
    my_array(const T* first, const T* last){
        size_ = last - first;
        data_ = new T[size_];

        for (std::size_t i = 0; i<size_; i++)
            data_[i] = first[i];
    }

    ~my_array(){ …
Run Code Online (Sandbox Code Playgroud)

c++ pointers iterator stl

16
推荐指数
2
解决办法
1万
查看次数

标签 统计

c++ ×2

iterator ×2

pointers ×1

stdvector ×1

stl ×1

vector ×1