我在向量中插入带有 push_back 的元素。我想读取 FIFO 中的数据并使用分配给向量开头的迭代器。有没有其他方法可以在向量中读取 FIFO 中的数据?
问问题
181 次
4 回答
5
您可以使用 astd::deque()
及其pop_front()
方法。
于 2013-10-17T10:42:04.910 回答
0
代码将是:
auto value = myvector[0];
myvector.erase(myvector.begin());
但是,从开头(或介于两者之间)删除元素很慢,因为它必须复制整个数组。虽然访问速度很快:vector
允许在 O(1) 中进行随机访问(即通过任何显式索引访问)(即恒定访问时间,即非常快)。
但是另一个容器结构而不是vector
可能对您更有意义,例如list
or deque
。一些 STL 实现(或其他框架)也有类似的东西rope
,在很多情况下它是两全其美的。
于 2013-10-17T10:43:25.977 回答
0
您可以访问 vecotr 的元素,就像访问数组的元素一样:
std::vector<std::string> vec;
// Excluded: push items onto vec
for (int i = 0; i < vec.size(); ++i) {
// Example:
std::cout << vec[i];
}
于 2013-10-17T10:44:52.097 回答
0
没有什么特别需要注意的。要插入、使用
push_back
、提取,您需要以下内容:
if ( !fifo.empty() ) {
ValueType results = fifo.front();
fifo.erase( fifo.begin() );
}
(不要忘记在尝试删除元素之前检查是否为空。)
需要记住的重要一点是,push_back
在某些情况下,这两者erase
都可能使迭代器无效,因此您不希望将迭代器保留在底层向量中。
于 2013-10-17T11:06:26.650 回答