C++: Proper way to iterate over STL containers

后端 未结 8 1399
灰色年华
灰色年华 2021-01-06 04:55

In my game engine project, I make extensive use of the STL, mostly of the std::string and std::vector classes.

In many cases, I have to ite

相关标签:
8条回答
  • 2021-01-06 05:56

    You might want to look at the standard algorithms.

    For example

    vector<mylass> myvec;
    
    // some code where you add elements to your vector
    
    for_each(myvec.begin(), myvec.end(), do_something_with_a_vector_element);
    

    where do_something_with_a_vector_element is a function that does what goes in your loop

    for example

    void 
    do_something_with_a_vector_element(const myclass& element)
    {
     // I use my element here
    }
    

    The are lots of standard algorithms - see http://www.cplusplus.com/reference/algorithm/ - so most things are supported

    0 讨论(0)
  • 2021-01-06 06:02
    • For random-access containers, it's not wrong.
    • But you can use iterators instead.

      for (string::const_iterator it = theContainer.begin();
           it != theContainer.end(); ++it) {
          // do something with *it
      }
      
    • There are some circumstances under which a compiler may optimize away the .size() (or .end() in the iterator case) calls (e.g. only const access, function is pure). But do not depend on it.

    0 讨论(0)
提交回复
热议问题