C++.Coding.Standards.1918.Rules.Guidelines [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

C++.Coding.Standards.1918.Rules.Guidelines [Electronic resources] - نسخه متنی

Herb Sutter, Andrei Alexandrescu

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید


Discussion


For unsorted ranges,

find /

find_if and

count /

count_if can tell you in linear time whether and where, respectively, an element exists in a range. Note that

find /

find_if is typically more efficient because it can stop searching when a match is found.

For sorted ranges, prefer the four binary search algorithms,

binary_search, lower_bound, upper_bound , and

equal_range , which work in logarithmic time. Alas, despite its nice name,

binary_search is nearly always useless because it only returns a

bool indicating whether a match was found or not. Usually, you want

lower_bound or

upper_bound or

equal_range , which gives you the results of both

lower_bound and

upper_bound (but not at twice the cost).

lower_bound returns an iterator pointing to the first match (if there is one) or the location where it would be (if there is not); the latter is useful to find the right place to insert new values into a sorted sequence.

upper_bound returns an iterator pointing to one past the last match (if there is one), which is the location where the next equivalent element can be added; this is useful to find the right place to insert new values into a sorted sequence while keeping equivalent elements in the order in which they were inserted.

Prefer

p = equal_range( first, last, value ); distance( p.first, p.second ); as a faster version of

count( first, last, value ); for sorted ranges.

If you are searching an associative container, prefer using the member functions with the same names instead of the nonmember algorithms. The member versions are usually more efficient, including that the member version of

count runs in logarithmic time (and so there's no motivation to replace a call the member

count with a call to

equal_range followed by

distance , as there is with the nonmember

count ).


/ 521