0

我在向量中插入带有 push_back 的元素。我想读取 FIFO 中的数据并使用分配给向量开头的迭代器。有没有其他方法可以在向量中读取 FIFO 中的数据?

4

4 回答 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可能对您更有意义,例如listor 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 回答