찾다

 >  Q&A  >  본문

c++ - 数组和vector的用法

怪我咯怪我咯2805일 전723

모든 응답(2)나는 대답할 것이다

  • 阿神

    阿神2017-04-17 13:07:16

    你可以写:vec.begin() + i; 或者vec[i]
    另外,用vector时,传递“引用”更好些。
    void func(vector<int>& vec);

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 13:07:16

    STL使用iterator来抽象。你这样的情况,不管func是不是只读的,你都可以参考std::sort的写法。

    总的来说就是这样,把

    void func(int* array, int size);
    

    改成

    template<TIterator>
    void func(TIterator begin, TIterator end);
    

    举个简单的例子,二分查找法:

    template<typename TIterator> // 需要random iterator,如果使用了C++ concept的话可以有效美化错误信息
    bool find(TIterator begin, TIterator end, std::remove_reference_t<decltype(**(TIterator*)nullptr)> value)
    {
        auto size = end - begin;
        if (size <= 0) return false;
        auto position = begin + (size / 2);
        auto middle = *position;
        if (middle > value) return findx(begin, position, value);
        if (middle < value) return findx(position+1, end, value);
        return true;
    }
    
    vector<int> x = {1, 2, 3, 4, 5};
    find(x.begin(), x.end(), 2); // true
    find(x.begin() + 2, x.begin() + 3, 2); // false
    

    由此可见,iterator是发明来模拟指针这个概念的。不过指针的运算要求内容的存储是连续的,而iterator并不要求。所以为了思考方便,你只要把iterator想成指针就可以了。

    회신하다
    0
  • 취소회신하다