以下代码按预期工作(测试通过),但我想知道以这种方式使用迭代器在 c++ 中是否被认为是一种不好的做法,或者是否可以。
也许这是特定于std::vector
其他集合的行为不同并且集合(甚至它们的实现)之间的最佳实践不同?
这在其他语言中肯定是不行的,而且大多数时候更改集合会使迭代器无效并抛出异常。
BOOST_AUTO_TEST_CASE (ReverseIteratorExample) {
std::vector<int> myvector;
for(int i = 0; i < 5; i++)
{
myvector.push_back(i);
}
// is this generally a bad idea to change the vector while iterating?
// is it okay in this specific case?
myvector.reserve(myvector.size() + myvector.size() - 2 );
myvector.insert(myvector.end(), myvector.rbegin() + 1, myvector.rend() -1);
int resultset [8] = { 0,1,2,3,4,3,2,1 };
std::vector<int> resultVector( resultset, resultset + sizeof(resultset)/sizeof(resultset[0]) );
BOOST_CHECK_EQUAL_COLLECTIONS(myvector.begin(), myvector.end(), resultVector.begin(), resultVector.end());
}
总结问题:
- 在迭代时更改向量通常是一个坏主意吗?
- 在这种特定情况下可以吗?
- 这是特定于
std::vector
和其他集合的行为不同吗? - 集合(甚至它们的实现)之间的最佳实践是否有所不同?