我们假设我们在内存中读取了一个100MB的大文件:
std::vector<unsigned char> paddedName = { '0', '0', '0', 'T', 'O', 'M'/*... 100MB+ of data ... */ };
如何删除前三个字符并使用填充数据创建一个新向量,同时丢弃旧的向量数据?
以下是复制操作的样子:
std::vector<unsigned char> unpaddedName(paddedName.begin() + 3, paddedName.end());
但我们显然不想复制100MB的内存,只是为了从头开始删除3个字符。
那么有更好的方法吗?
答案 0 :(得分:9)
如果必须是vector
,那么你就无法做到。向量维护一个连续的数组,只允许您调整其大小(从末尾添加或删除),而不是它的起始点,因此从开始添加或删除需要移动剩余的元素。
您可以使用deque
,允许从两端删除。或者您可以安排在将不需要的字符读入矢量时跳过它们,而不是在以后删除它们。或者您可以将自己的指针/迭代器维护到有效数据的开头,并使用它而不是paddedName.begin()
。您可以将其推广到&#34;视图&#34; class,包含一对指针/迭代器,用于表示底层向量的子范围,并使用它来仅访问所需的数据。