【发布时间】:2012-07-12 17:35:39
【问题描述】:
我正在使用向量,在某些时候会有 NULL 条目;我想删除给定向量中的所有 NULL 出现。到目前为止,我的方法不起作用:
for(int i = sent_flit_list->size() - 1; i >= 0; i--)
if(sent_flit_list[i] == NULL)
sent_flit_list->erase(sent_flit_list[i]);
for(int i = sent_pkt_list->size() - 1; i >= 0; i--)
if(sent_pkt_list[i] == NULL)
sent_pkt_list->erase(sent_pkt_list[i]);
在哪里
vector<Flit*> *sent_flit_list;
vector<Packet*> *sent_pkt_list;
是向量。我尝试转换为 (Flit*)NULL/(Flit*)0 类型,但没有成功。
任何帮助将不胜感激。
【问题讨论】:
-
“不工作”到底是什么意思?发生什么了?它与你想要发生的有什么不同?
-
IIRC,
vector::erase将迭代器,而不是值作为参数。 -
@Gareth 给出错误,例如错误 C2678: binary '==' : no operator found... 我只是想删除那些向量中指向 NULL 的所有内容。
-
您真的应该为此使用
remove,而不是显式循环。我认为你的问题的直接原因是sent_flit_list和sent_pkt_list是指向向量的指针,而不是向量,所以当你说例如sent_pkt_list[i]索引操作不是你想的那样。 (这不是代码的唯一问题,而是导致该错误消息的问题。) -
另一个到目前为止没有人提到的提示,如果这是错误的,请删除:我们不应该删除元素并在没有迭代器的情况下循环遍历向量。因为假设您在
std::vector a中有 2 个值,您像您一样使用索引遍历向量,现在擦除位置 1 的值,2 索引现在是错误的,因为向量缩小了...始终使用迭代器 (it) 和使用it=a.erase(it)