Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Edited by sciSpider (sch jbop) (X_X)@==(Q_Q)@

Wiki Markup
Reallocation can occur when a member function modifies its container. Modifying member functions include {{reserve()}} and {{resize()}}, {{push_back()}}, {{pop_back()}}, {{erase()}}, {{clear()}}, {{insert()}}, and others. In addition, assignment operations and modifying algorithms can also cause reallocation. When a container reallocates its elements, their addresses change. Consequently, the values of existing iterators are invalidated \[[Kalev 99|AA. C++ References#Kalev 99]\]. Using invalid iterators yields undefined results.  (This problem is also discussed in [DAN33-C|DAN33-C. Do not use invalid iterators].)

...

Code Block
bgColor#ccccff
double data[5] = { 2.3, 3.7, 1.4, 0.8, 9.6 };
deque<double> d;

transform(data, data+5,
    inserter(d, d.begin()),
    bind2nd(plus<int>(), 41));

...

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

STL30-C

1 (low)

2 (probable)

1 (high)

P2

L3

References

Wiki Markup
\[[Meyers 01|AA. C++ References#Meyers 01]\] Item 43: Prefer algorithm calls to hand-written loops.

Wiki Markup
\[[Sutter 04|AA. C++ References#Sutter 04]\] Item 84: Prefer algorithm calls to handwritten loops.

Wiki Markup
\[[Kalev 99|AA. C++ References#Kalev 99]\] ANSI/ISO C+\+ Professional Programmer's Handbook.

Wiki Markup
\[[ISO/IEC 14882-2003|AA. C++ References#ISO/IEC 14882-2003]\] Section 24: Iterators Library.