www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - So how do I find and remove an element from DList?

reply Ogi <ogion.art gmail.com> writes:
auto list = DList!int([1, 2, 3, 4]);
list.remove(list[].find(2).take(1));

 Error: function 
 std.container.dlist.DList!int.DList.remove(Range r) is not 
 callable using argument types (Take!(Range))
It works if I replace `remove` with `linearRemove`, but that defeats the whole purpose of using a doubly linked list.
Jul 10 2020
parent reply Steven Schveighoffer <schveiguy gmail.com> writes:
On 7/10/20 3:08 PM, Ogi wrote:
 auto list = DList!int([1, 2, 3, 4]);
 list.remove(list[].find(2).take(1));
 
 Error: function std.container.dlist.DList!int.DList.remove(Range r) is 
 not callable using argument types (Take!(Range))
It works if I replace `remove` with `linearRemove`, but that defeats the whole purpose of using a doubly linked list.
It's not linear over the size of the list, it's linear over the size of the range. If you are always removing 1 element, it's effectively O(1). -Steve
Jul 10 2020
parent Ogi <ogion.art gmail.com> writes:
On Friday, 10 July 2020 at 19:23:57 UTC, Steven Schveighoffer 
wrote:
 It's not linear over the size of the list, it's linear over the 
 size of the range.

 If you are always removing 1 element, it's effectively O(1).

 -Steve
I see. Thanks!
Jul 10 2020