Вопрос про STL
От: Aractan  
Дата: 24.08.05 04:31
Оценка:
Какой из контейнеров будет работать не медленние массива в этом случае?


int array[50]
for( int i = 0; i < 50; i += 5 )
{
  array[i] = i * 2;
}
Re: Вопрос про STL
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 24.08.05 05:03
Оценка:
Здравствуйте, Aractan, Вы писали:

A>Какой из контейнеров будет работать не медленние массива в этом случае?



A>
A>int array[50]
A>for( int i = 0; i < 50; i += 5 )
A>{
A>  array[i] = i * 2;
A>}
A>


std::vector<int> array(50);
for( int i = 0; i < 50; i += 5 )
{
  array[i] = i * 2;
}
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[2]: Вопрос про STL
От: Aractan  
Дата: 24.08.05 05:37
Оценка:
Здравствуйте, Mr. None, Вы писали:

MN>
MN>std::vector<int> array(50);
MN>for( int i = 0; i < 50; i += 5 )
MN>{
MN>  array[i] = i * 2;
MN>}
MN>


а вот так
std::vector<int> array(50);
for( int i = 0; i < 50; i ++ )
{
array[i] = i * 2;
}
[/ccode]

вектор медленние?
Re[3]: Вопрос про STL
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 24.08.05 05:51
Оценка:
Здравствуйте, Aractan, Вы писали:

A>Здравствуйте, Mr. None, Вы писали:


MN>>
MN>>std::vector<int> array(50);
MN>>for( int i = 0; i < 50; i += 5 )
MN>>{
MN>>  array[i] = i * 2;
MN>>}
MN>>


A>а вот так

A>std::vector<int> array(50);
A>for( int i = 0; i < 50; i ++ )
A>{
A> array[i] = i * 2;
A>}
A>[/ccode]

A>вектор медленние?


Медленнее чем что? Может быть изредка он и будет слегка медленнее обычного массива, но быстрее других контейнеров на одних операциях (доступ по индексу) и медленнее на других (вставка в середину). Вы скажите что вам надо, а не играйте в "Что? Где? Когда?"... А ещё лучше задайте вопрос напрямую самому главному гуру на RSDN`е, найти его можно здесь.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[4]: Вопрос про STL
От: Aractan  
Дата: 24.08.05 06:24
Оценка:
Здравствуйте, Mr. None, Вы писали:

A>>а вот так

A>>std::vector<int> array(50);
A>>for( int i = 0; i < 50; i ++ )
A>>{
A>> array[i] = i * 2;
A>>}
A>>[/ccode]

A>>вектор медленние?


MN>Медленнее чем что?

чем массив.

Может быть изредка он и будет слегка медленнее обычного массива, но быстрее других контейнеров на одних операциях (доступ по индексу) и медленнее на других (вставка в середину).
как понять "иногда слегка медленние", т.е. при каких условиях ?

а вопрос такой. Если доступ к элиментам массива производится не попорядка (т.е. не 0,1,2,3,4.....а как-нибудь вроде 1,5,7,10,16 )
то существует ли контейнер который позволит обращаться к своим элементам не медленние чем обычный массив.
Re[5]: Вопрос про STL
От: jazzer Россия Skype: enerjazzer
Дата: 24.08.05 06:34
Оценка:
Здравствуйте, Aractan, Вы писали:

A>Может быть изредка он и будет слегка медленнее обычного массива, но быстрее других контейнеров на одних операциях (доступ по индексу) и медленнее на других (вставка в середину).

A>как понять "иногда слегка медленние", т.е. при каких условиях ?

нет желания прочитать какую-нть книжку по STL? или статьи хотя бы...

A>а вопрос такой. Если доступ к элиментам массива производится не попорядка (т.е. не 0,1,2,3,4.....а как-нибудь вроде 1,5,7,10,16 )

A>то существует ли контейнер который позволит обращаться к своим элементам не медленние чем обычный массив.

очередь
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Вопрос про STL
От: BreQwaS Россия  
Дата: 24.08.05 06:40
Оценка:
Здравствуйте, Aractan, Вы писали:

A>Какой из контейнеров будет работать не медленние массива в этом случае?


Конкретно в этом — std::vector<int>. Причём вряд ли "не медленнее" — std::vector::operator[] определённо будет работать чуть дольше, чем аналогичный у указателя. Но есть подозрение, что этот код — не есть всё использование массива. С ним будут производиться ещё какие-то действия, так?

Если так, то расскажите, какие.
http://livejournal.com/users/breqwas
Re: Вопрос про STL
От: Chez Россия  
Дата: 24.08.05 06:48
Оценка:
Здравствуйте, Aractan, Вы писали:

A>Какой из контейнеров будет работать не медленние массива в этом случае?



A>
A>int array[50]
A>for( int i = 0; i < 50; i += 5 )
A>{
A>  array[i] = i * 2;
A>}
A>

vector, list будет работать также.
deque будет работать немного медленнее.

Chez, ICQ#161095094

Posted via:RSDN@Home;version:1.1.3;muzikstamp:Ajattara — Agras

Re[2]: Вопрос про STL
От: Chez Россия  
Дата: 24.08.05 06:51
Оценка:
тьфу. list будет медленнее. было бы также, если бы было ++i, а не i += 5.

Chez, ICQ#161095094

Posted via:RSDN@Home;version:1.1.3;muzikstamp:Ajattara — Agras

Re: Вопрос про STL
От: Glоbus Украина  
Дата: 24.08.05 07:03
Оценка:
Здравствуйте, Aractan, Вы писали:

A>Какой из контейнеров будет работать не медленние массива в этом случае?



A>
A>int array[50]
A>for( int i = 0; i < 50; i += 5 )
A>{
A>  array[i] = i * 2;
A>}
A>


std::vector
Удачи тебе, браток!
Re[2]: Вопрос про STL
От: Aractan  
Дата: 24.08.05 07:49
Оценка:
Здравствуйте, BreQwaS, Вы писали:
BQS>Но есть подозрение, что этот код — не есть всё использование массива. С ним будут производиться ещё какие-то действия, так?
BQS>Если так, то расскажите, какие.

сначала заполнятся воот так


int mass[some_size];
for( int i = 0; i < some_size; i++ )
{
  mass[i] = calc_some_value( i );
}


а потом читаться примерно так


int       new_mass[some_new_size];
unsigned index_before;
unsigned index_after;

for( int i = 0; i < some_new_size; i ++ )
{
  index_before = find_index_before( j, mass );
  index_after  = find_index_after ( j, mass );
 
  new_mass[j] = approximate( mass[i], mass[i+1] );
}
Re[6]: Вопрос про STL
От: Aractan  
Дата: 24.08.05 07:51
Оценка:
Здравствуйте, jazzer, Вы писали:

J>нет желания прочитать какую-нть книжку по STL? или статьи хотя бы...


желание есть и книжка есть. просто еще есть ряд книжек которые я планирую прочитать до "про STL", хотя уже подумываю перерасставить приоритеты....
Re[3]: Вопрос про STL
От: Аноним  
Дата: 24.08.05 08:04
Оценка:
Здравствуйте, Aractan, Вы писали:

A>Здравствуйте, BreQwaS, Вы писали:

BQS>>Но есть подозрение, что этот код — не есть всё использование массива. С ним будут производиться ещё какие-то действия, так?
BQS>>Если так, то расскажите, какие.

A>сначала заполнятся воот так



A>
A>int mass[some_size];
A>for( int i = 0; i < some_size; i++ )
A>{
A>  mass[i] = calc_some_value( i );
A>}

A>


A>а потом читаться примерно так



A>
A>int       new_mass[some_new_size];
A>unsigned index_before;
A>unsigned index_after;

A>for( int i = 0; i < some_new_size; i ++ )
A>{
A>  index_before = find_index_before( j, mass );
A>  index_after  = find_index_after ( j, mass );
 
A>  new_mass[j] = approximate( mass[i], mass[i+1] );
A>}
A>


Если доступ к массиву критичен по времени, можешь вытащить из std::vector'а указатель на данные
std::vector mass(50); 
int *pmass = &mass[0]

и работать с ним.
Re[3]: Вопрос про STL
От: Aractan  
Дата: 24.08.05 08:06
Оценка:
Ошибся, вот так

A>
A>int       new_mass[some_new_size];
A>unsigned index_before;
A>unsigned index_after;

A>for( int i = 0; i < some_new_size; i ++ )
A>{
A>  index_before = find_index_before( j, mass );
A>  index_after  = find_index_after ( j, mass );
 
A>  new_mass[i] = approximate( mass[index_before], mass[index_after] );
A>}
A>
Re[4]: Вопрос про STL
От: Aractan  
Дата: 24.08.05 08:12
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Если доступ к массиву критичен по времени, можешь вытащить из std::vector'а указатель на данные
А>
А>std::vector mass(50); 
А>int *pmass = &mass[0]
А>

А> и работать с ним.

А вектор разве в памяти непрерывно размещается?
Re[5]: Вопрос про STL
От: gbt Россия  
Дата: 24.08.05 08:19
Оценка:
Hello, Aractan, you wrote:

> А вектор разве в памяти непрерывно размещается?


да.

--
Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Posted via RSDN NNTP Server 1.9
Re[5]: Вопрос про STL
От: eju  
Дата: 24.08.05 08:35
Оценка:
Aractan wrote:

> Здравствуйте, Аноним, Вы писали:

> А>Если доступ к массиву критичен по времени, можешь вытащить из
> std::vector'а указатель на данные А>
> А>std::vector mass(50);
> А>int *pmass = &mass[0]
> А>

> А> и работать с ним.
>
> А вектор разве в памяти непрерывно размещается?
У std::vector да !
Posted via RSDN NNTP Server 1.9
Re[2]: Вопрос про STL
От: Warturtle  
Дата: 24.08.05 08:46
Оценка:
Здравствуйте, BreQwaS, Вы писали:

BQS>Здравствуйте, Aractan, Вы писали:


A>>Какой из контейнеров будет работать не медленние массива в этом случае?


BQS>Конкретно в этом — std::vector<int>. Причём вряд ли "не медленнее" — std::vector::operator[] определённо будет работать чуть дольше, чем аналогичный у указателя.

Это с чего такая уверенность? В любой "нормальной" реализации и с "нормальным" компилятором, в неотладочной версии это будет одно и тоже. Другое дело, что тут, массив статический (на стеке), если я правильно понимаю. А это значит что "не медленнее" будет boost::array т.е. такой же массив.
Re[7]: Вопрос про STL
От: jazzer Россия Skype: enerjazzer
Дата: 24.08.05 08:53
Оценка:
Здравствуйте, Aractan, Вы писали:

A>Здравствуйте, jazzer, Вы писали:


J>>нет желания прочитать какую-нть книжку по STL? или статьи хотя бы...


A>желание есть и книжка есть. просто еще есть ряд книжек которые я планирую прочитать до "про STL", хотя уже подумываю перерасставить приоритеты....


мудрое решение.
Потмоу что пока что все заданные тобой вопросы по STL — это RTFM, и они у тебя исчезнут автоматически по прочтении любой нормальной книги по STL.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: Вопрос про STL
От: MaximE Великобритания  
Дата: 24.08.05 09:01
Оценка:
BreQwaS wrote:

> Здравствуйте, Aractan, Вы писали:

>
> A>Какой из контейнеров будет работать не медленние массива в этом случае?
>
> Конкретно в этом — std::vector<int>. Причём вряд ли "не медленнее" — std::vector::operator[] определённо будет работать чуть дольше, чем аналогичный у указателя.

В подтверждение своих слов приведи результаты тестов. Судя по исходникам, я не вижу почему std::vector::operator[] может работать дольше.

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.