如何用链表代替std::vector
How to replace std::vector by linked list?
我使用std::vector
来制作我的算法。我想用链表代替向量
为了做到这一点,我正在考虑使用std::list
,但我不知道如何做到这一点,例如,我已经尝试了以下示例来查找向量/列表中的值:
void find_values_in_vector(const std::vector<int>& input_vector, int value, int &rv1, int &rv2)
{
if (input_vector[0] >= value) { // too small
rv1 = 0; rv2 = 0; return;
}
int index = (int)input_vector.size() - 1;
if (input_vector[index] <= value) { // too big
rv1 = index; rv2 = index; return;
}
// somewhere inside
index = 0;
while (input_vector[index] <= value) {
index++;
}
rv1 = index - 1; rv2 = index; return;
}
void find_values_in_list(const std::list<int>& input_list, int value, int &rv1, int &rv2)
{
if (*input_list.begin() >= value) { // too small
rv1 = 0; rv2 = 0; return;
}
if (*input_list.end() <= value) { // too big
rv1 = (int)input_list.size() - 1; rv2 = (int)input_list.size() - 1; return;
}
// somewhere inside
int index = 0; int temp = *input_list.begin();
while (temp <= value) {
temp = *input_list.next(); index++;
}
rv1 = index - 1; rv2 = index; return;
}
这似乎不起作用,因为成员函数next()
不存在。然而,我记得浏览链表是通过从开始开始,并进一步移动到下一个元素,直到到达某个点来完成的。我已经看到有一种方法可以通过在for循环中使用interator
来完成此操作,但我想知道我的方法有什么问题?我的印象是std::list
是一个双向链表的标准实现,或者我错了,在这种情况下,什么std
类是一个链表的实现(它不需要是一个双向链表)?
遍历容器的标准方法如下:
for(std::list<int>::iterator it = input_list.begin();
it != input_list.end();
it++)
{
....
}
这也适用于vector,map,deque等。迭代器的概念在整个STL中都是一致实现的,所以最好习惯这个概念。
对于不同类型的迭代器,还有std::distance
和std::advance
等迭代器操作(我建议你仔细阅读它们以及它们的优点/局限性)
如果你有c++ 11可用,你也可以使用这个语法(可能对你的问题没有帮助)
for(const auto& value : input_list)
{
...
}
这也适用于整个STL容器。
对于vector、list、deque和set(假设内容已经排序)都可以使用。
template <class T>
void find_values_in_container(const T& container, int value, int &rv1, int &rv2)
{
rv1 = rv2 = 0; // Initialize
if (container.empty() || container.front() >= value)
{
return;
}
for (const auto& v : container)
{
rv2++;
if (v > value)
{
break;
}
rv1++;
}
return;
}
相关文章:
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- std::vector的包装器,使数组的结构看起来像结构的数组
- 编译器如何区分std::vector的构造函数
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 在std::vector上存储带有模板的类实例
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 为什么std::vector比数组慢
- std::vector::迭代器是否可以合法地作为指针
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- 为什么std::vector和std::valarray初始化构造函数不同
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 在没有未定义行为的情况下实现类似std::vector的容器
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- 使用 std::vector::reverse_iterator 将 int 序列化为字节向量?
- 如何将AERT_Allocate与 std:vector 一起使用
- 推导 std::vector::back() 的返回类型
- 如何将原始字节附加到 std::vector?
- std::vector 没有重载函数的实例与参数列表匹配
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?