【发布时间】:2011-12-02 16:55:28
【问题描述】:
我正在尝试制作一个处理 INI 文件的小程序,以便在以后的项目中使用,首先是在加载到内存后减小其大小。因此,
其中 vLine 是包含文件内容的向量
for (unsigned int i = 0; i < vLine.size(); i++)
{
if (!vLine[i].find(';', 0))
{
vLine[i].erase();
}
}
在打印 vLine 时,我会在曾经存在以分号开头的行的地方留下空格,例如
1.
2. property
3. property
4.
5. property
使用 resize() 似乎是从列表中删除最后一个元素,而不是删除这些空白部分。同样的问题也存在于我使用erase() 删除只包含空格的行。
是否可以在保留vLine顺序的同时去掉这些空元素?
(很抱歉在此没有使用迭代器。)
【问题讨论】:
-
回复:(很抱歉在此不使用迭代器。) - 为什么不使用迭代器?
-
对其正确使用缺乏了解。没有他们似乎(似乎?)可以做到这一点。
-
您可以从向量中删除行,而不仅仅是删除字符串的内容(这是
vLine[i].erase()所做的,不是吗?调用vLine.erase(),因为它会从vector中删除。然后重写文件输出。一个惯用的方法是 C++ 的 erase-remove idiom,尽管您可能希望使用<algorithm>中的std::remove_if来使用条件。