[英]How to set objects in 2D vector to null pointer [C++]
想像
std::vector<std::vector<Objekt>> m_pole;
我們想將每個對象設置為nullptr。 但是以下代碼會產生2個錯誤。 未聲明Vars row和col。
std::vector<std::vector<Objekt>>::std::iterator row;
std::vector<Objekt>::std::iterator col;
for(row = m_pole.begin(); row != m_pole.end(); row++) {
for(col = row->begin(); col != row->end(); col++) {
m_pole[row][col] = nullptr;
}
}
任何想法如何解決這個問題? 感謝您的回答,MK。
您似乎混淆了很多事情。
第一:您有一個對象向量的向量。 那很好! 但是,它是對象,而不是指針(再次證明是好的),因此它不能為null,因為只有指針可以為null(最后一次,這很好,沒有無效的內存訪問,空指針異常…)。 如果要處理可選元素,則必須決定不同的策略:
其次:您在混淆指針和索引
std::vector<std::vector<Objekt>>::iterator row_it; // where does this std came from ?
std::vector<Objekt>::iterator element_it; // the iterator points to an element
for(row_it = m_pole.begin(); row_it != m_pole.end(); ++row_it) { // Get the habit to pre-increment
for(element_it = row_it->begin(); element_it != row->end(); ++element_it) {
*element_it = nullptr; // This won't work, as it's an object, not a pointer
}
}
第三:c ++ 11具有不錯的迭代器(否則,請使用BOOST_FOREACH):
for(auto & row : m_pole) // reference is importante !
for(auto & element : row)
element = nullptr; // again, can't work because it's an object
您正在混合迭代器和索引。 使用*
運算符可取消對迭代器的引用。
for(row = m_pole.begin(); row != m_pole.end(); row++)
{
for(col = row->begin(); col != row->end(); col++)
*col = nullptr;
}
假設Objekt
是指針的typedef或它具有可以采用nullptr
的賦值運算符。 否則,您將需要使用Objekt*
但是您可以省去編寫初始化循環的麻煩,而只需使用std::vector
構造函數即可。
std::vector<std::vector<Objekt> > m_poles(numrows, std::vector<Objekt>(numcols, nullptr));
您應該使用指針:
std::vector<std::vector<Objekt*>> m_pole;
std::vector<std::vector<Objekt*>>::std::iterator row;
std::vector<Objekt*>::std::iterator col;
for(row = m_pole.begin(); row != m_pole.end(); row++) {
for(col = row->begin(); col != row->end(); col++) {
*col = nullptr;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.