Performance - checking if container is empty before doing operations on it?
Is there a significant difference between doing this...
if ( !myVector.empty()) {
  for ( unsigned int i = 0; i < myVector.size(); ++i ) {
    // do stuff
  }
}
and this
for ( unsigned int i = 0; i < myVector.size(); ++i ) {
  // do stuff
}
if the vecto开发者_开发问答r is empty? What is the cost of this on an empty vector?
Both size and empty are constant time for vectors.  So most of the time (non-empty vectors), the first one just adds a small, constant amount of work.  The second is clearly cleaner, and probably negligibly more efficient on average.
vector::size is required to be O(1) complexity. So for any reasonable implementation, for VECTORS, you can skip the calls to empty().
A reasonable implementation of a vector would look something like this:
class vector { 
    private:
        size_t m_size;
    public:
        size_t size() {
            return m_size;
        }
        bool empty() {
            return m_size == 0;
        }
};
Since you asked for performance, why do you need to call the method size in for loop? Why don't you get the value before the loop starts ?
size_t size = myvector.size();
As far as your question, others have already replied.
i < myVector.size();
Will cause the loop to die before running on an empty vector. Anything more is redundant.
You are right, empty() is faster than comparing size() against zero
That's a rule mentioned by Effective STL
 
         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论