C++矢量见解

Sun*_*een 2 c++ stl vector

我对如何在C++中使用向量感到有点沮丧.我广泛使用它们虽然我不确定如何使用它们.以下是问题?

  1. 如果我有一个向量可以说:std::vector<CString> v_strMyVector,(int)v_strMyVector.size > i我可以访问i成员:v_strMyVector[i] == "xxxx";?(它有效,但为什么?)

  2. 我是否总是需要定义一个迭代器来访问转到向量的开头,并对其成员进行lop?

  3. 如果我可以直接访问向量的所有成员(参见1),迭代器的目的是什么?

谢谢,孙先生

ken*_*ytm 10

  1. 它的作用只是因为没有界限检查operator[],出于性能原因.这样做会导致未定义的行为.如果您使用更安全v_strMyVector.at(i),它将抛出OutOfRange异常.

    这是因为operator[]返回引用.

  2. 由于vectors可以在O(1)时间内随机访问,因此通过索引或迭代器循环不会产生任何性能差异.

  3. 迭代器允许您编写独立于容器的算法.这个迭代器模式在<algorithm>库中使用很多,以便更容易编写通用代码,例如,不需要为每个M容器需要N个成员(即编写M*N个函数)

    std::vector<T>::find(x)
    std::list<T>::find(x)
    std::deque<T>::find(x)
    ...
    std::vector<T>::count(x)
    std::list<T>::count(x)
    std::deque<T>::count(x)
    ...
    
    Run Code Online (Sandbox Code Playgroud)

    我们只需要N个模板

    find(iter_begin, iter_end, x);
    count(iter_begin, iter_end, x);
    ...
    
    Run Code Online (Sandbox Code Playgroud)

    并且每个M容器都提供迭代器,减少了仅M + N所需的函数数量.