這個示例代碼是否有效?是一個迭代器vec.end()在vec.push_back()沒有重新分配時仍然有效
#include<vector>
using namespace std;
int main() {
vector<int> vec(10); // create with 10 elements
vec.reserve(100); // set capacity to 100
vector<int>::iterator iter = vec.end(); // points 1 past vec[9]
vec.push_back(777);
bool is_this_valid_and_true = *iter == vec[10]; // ?
// VS2010 runtime error in debug build:
// Expression: vector iterator not dereferencable
// Works in release build
iter = vec.end() + 1; // points 2 past vec[10]?
vec.push_back(888);
vec.push_back(999);
is_this_valid_and_true = *iter == vec[12]; // ?
}
VS2010中的錯誤可能與此有關
bug。
如果我設置的命令行選項/D_HAS_ITERATOR_DEBUGGING=0
或設置
#define _HAS_ITERATOR_DEBUGGING 0
#include<vector>
沒有錯誤。
編輯:
在尋找答案的方式,我覺得這應該代碼導致錯誤。編譯器中沒有錯誤。它只在釋放模式下工作,因爲迭代器被實現爲指針。
2011-03-22 20:11:36
有一個錯誤(它只是沉默,致命,並會在稍後的時間殺死你與飛行的鼻子惡魔)。 –