我用std::vector
來製作我的算法。我想用鏈接列表替換向量。如何用鏈表替換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
是一個雙向鏈表的標準實現,或者我錯了,在這種情況下,類是鏈表的實現(它不需要是雙向的鏈表)?
與stl中的所有容器相同:您主要通過迭代器來導航它們。如果你來自其他語言,它已經有點習慣了,但它非常整齊,因爲它在任何地方都是一致的。是否有任何理由順便說一句。爲什麼你切換到列表?向量在大多數情況下更好。 – Hayt
如果要使用整數(不是'std :: list')進行索引,請將其設置爲'size_t',而不是'int'。 – LogicStuff