4 ms·
No, but in other languages there seems to be much more consensus about what features one should use, how and when. In C++ it seems everyone has completely diff
by luriel 14y ago
No, but in other languages there seems to be much more consensus about what features one should use, how and when.
In C++ it seems everyone has completely different views.
- aidenn0 14y agoI agree its a problem with C++, but IMO it is an inevitable consequence of its strengths: namely that it is regularly used across a very wide range of domains than other languages. I've sen it used on 16-bit microcontrollers, where templates and exceptions were considered harmful, and in large applications, where those features were considered essential.
- rumcajz 14y agoHow would you implement an O(1) list without breaking encapsulation then?
- tptacek 14y agoWhat do you mean, "O(1) list"?
- tg3 14y agoI assume he meant "a list from which an element can be removed in constant time."
- mpyne 14y agoPerhaps I'm being dumb, but doesn't std::list<T> already do exactly this? From SGI's STL docs: "A list is a doubly linked list. That is, it is a Sequence that supports both forward and backward traversal, and (amortized) constant time insertion and removal of elements at the beginning or the end, or in the middle"
- malkia 14y agoAs others have said - yes, as long as you keep the iterator not the object itself. e.g. from T itself you cannot find where it was stored, so with std::list<something>, and then only from something you can't find where it is (you can have to look for it in the list).
- tedunangst 14y agoThe question doesn't make much sense. Your C example totally breaks encapsulation.
- rumcajz 14y agoWell, what kind of problem is that in C? It's C. It has no public/private keywords. Nobody expect struct in C to be well-encapsulated.
- scott_s 14y agoIt's also not a problem in C++ if you don't care. Just because C++ gives you the means to enforce encapsulation doesn't mean you have to. And, as I said below, when your goal is performance and you need to break abstractions, it makes sense not to enforce encapsulation.
- ahupp 14y agohttp://www.boost.org/doc/libs/1_35_0/doc/html/intrusive/usage.html http://www.boost.org/doc/libs/1_35_0/doc/html/intrusive/usag... Not sure if this qualifies as not "breaking encapsulation" but it's as close as you're going to get.
- eklitzke 14y agoThe idiomatic way to access and manipulate STL data structures is through iterators. In this case, an iterator for a std::list is basically a pointer/reference to the person container in the article, so if you're referring to the list objects via their iterators there's no need for O(n) list traversal.
- itsreallynotme 14y ago>in other languages there seems to be much more consensus about what features one should use, how and when Especially in theory. Python so desperately wants to not be Perl in this regard, so much that they codified it into PEP 20: "There should be one-- and preferably only one --obvious way to do it." The theory is great, but if one reads their standard library it is clear that practice does not agree.