當分配給動態分配的std::vector
的元素時,我遇到了與C++ 11基於範圍的for循環相關的奇怪行爲。我有以下代碼:在基於範圍的循環中設置矢量元素
int arraySize = 1000;
std::string fname = "aFileWithLoadsOfNumbers.bin";
CTdata = new std::vector<short int>(arraySize, 0);
std::ifstream dataInput(fname.c_str(), std::ios::binary);
if(dataInput.is_open()
{
std::cout << "File opened sucessfully" << std::endl;
for(auto n: *CTdata)
{
dataInput.read(reinterpret_cast<char*>(&n), sizeof(short int));
// If I do "cout << n << endl;" here, I get sensible results
}
// However, if I do something like "cout << CTdata->at(500) << endl;" here, I get 0
}
else
{
std::cerr << "Failed to open file." << std::endl;
}
如果我改變循環到一個更傳統的for(int i=0; i<arraySize; i++)
和到位的&n
在讀功能使用&CTdata->at(i)
,做的事情,因爲我期望的那樣。
我錯過了什麼?