[英]Dereferencing iterator to pointers correctly
我有一個指向對象的指針向量。 每個對象存儲一個值並有一個 toString() 函數,該函數將該值作為字符串返回。 我有一個迭代器來遍歷向量,我需要通過調用 toString() 來提取每個對象的值。 問題是,我不知道如何獲得價值。
此函數最終應該將數字寫入文件,但我使用 cout 進行測試。
void writeNumbers(vector<Integer*>& input)
{
ofstream write;
write.open("Integers.txt");
vector<Integer*>::iterator iter = input.begin();
for (iter; iter < input.end(); iter++)
{
**std::cout << (*iter)->toString() << std::endl;**
}
write.close();
I get an Access Violation error which points me to the toString() function:
std::string Integer::toString()
{
std::stringstream ss;
ss << *(this)->value;
return ss.str();
}
toString() works fine whenever I don't try to access it through the iterator.
編輯: toString 中的值實際上是一個指向數字的指針。
編輯 2:新的 writeNumbers:
void writeNumbers(vector<Integer*>& input)
{
ofstream write;
write.open("Integers.txt");
vector<Integer*>::iterator iter = input.begin();
for (iter; iter != input.end(); iter++)
{
std::cout << (*iter)->toString() << std::endl;
}
write.close();
}
最終編輯:好吧,問題原來是一個無聊的構造函數,它無法正確初始化指針,所以我偏離了問題的實際所在。 :)
Integer::Integer(string input)
{
if(isNaN(input))
value = new int(atoi(input.c_str()));
}
所以它應該是 !isNaN,另外我修復了在錯誤輸入時初始化它的問題:
//New constructor, works 100%
Integer::Integer(string input)
{
if(!isNaN(input))
value = new int(atoi(input.c_str()));
else
value = new int(0);
}
您的 toSting() 有問題。 改變
ss <<*(this)->value;
到
ss << value;
編輯:這不是錯誤,而是使用迭代器時的一般建議。 不要使用<
檢查結束,使用!=
。
iter < input.end()
應該是這樣的:
iter != input.end()
這是因為對於某些容器,< 運算符不會執行您期望的操作。 結果,在某些時候您可能會取消引用 input.end() 本身,這沒有任何意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.