如何将2D向量中的对象设置为空指针[C ]
How to set objects in 2D vector to null pointer [C++]
想象
std::vector<std::vector<Objekt>> m_pole;
我们要将每个对象设置为nullptr。但是以下代码会产生2个错误。vars行和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(如果这样做,请使用智能指针)
- 使用boost ::可选
其次:您正在混淆指针和索引
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
是指针的打字机,或者它具有可以服用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;
}
}
相关文章:
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 运行时错误:引用绑定到类型为"int"的空指针
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 为什么我在空指针错误(链表)中获取成员访问权限
- 从向量到空指针的 memcpy(反之亦然)不起作用
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 成员访问是否在空指针上定义C++?
- 尽管直接设置了指针数组,但仍为空
- 尝试将对象插入空指针数组时出现分段错误
- 为什么我们需要在 C++ 中检查空指针,而在 Java 中不需要?
- 是否允许向空指针添加零?
- 为什么 C 样式字符串的工作空指针检查不?
- 在函数内初始化无符号字符指针将返回空指针
- 尝试设置唯一指针布尔数组的值时BAD_ACCESS错误
- 递增空指针无法正确设置值
- 无法将键设置为"redisClusterCommand()"返回空指针
- 如何将2D向量中的对象设置为空指针[C ]
- c++设置char指针为空
- 当超出函数时,指针设置为空指针
- 关于设置空指针的混淆