Здравствуйте, 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`е, найти его можно здесь.
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Здравствуйте, 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 )
то существует ли контейнер который позволит обращаться к своим элементам не медленние чем обычный массив.
Здравствуйте, Aractan, Вы писали:
A>Может быть изредка он и будет слегка медленнее обычного массива, но быстрее других контейнеров на одних операциях (доступ по индексу) и медленнее на других (вставка в середину). A>как понять "иногда слегка медленние", т.е. при каких условиях ?
нет желания прочитать какую-нть книжку по STL? или статьи хотя бы...
A>а вопрос такой. Если доступ к элиментам массива производится не попорядка (т.е. не 0,1,2,3,4.....а как-нибудь вроде 1,5,7,10,16 ) A>то существует ли контейнер который позволит обращаться к своим элементам не медленние чем обычный массив.
Здравствуйте, Aractan, Вы писали:
A>Какой из контейнеров будет работать не медленние массива в этом случае?
Конкретно в этом — std::vector<int>. Причём вряд ли "не медленнее" — std::vector::operator[] определённо будет работать чуть дольше, чем аналогичный у указателя. Но есть подозрение, что этот код — не есть всё использование массива. С ним будут производиться ещё какие-то действия, так?
Здравствуйте, 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] );
}
Здравствуйте, 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'а указатель на данные
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>
Aractan wrote:
> Здравствуйте, Аноним, Вы писали: > А>Если доступ к массиву критичен по времени, можешь вытащить из > std::vector'а указатель на данные А>
Здравствуйте, BreQwaS, Вы писали:
BQS>Здравствуйте, Aractan, Вы писали:
A>>Какой из контейнеров будет работать не медленние массива в этом случае?
BQS>Конкретно в этом — std::vector<int>. Причём вряд ли "не медленнее" — std::vector::operator[] определённо будет работать чуть дольше, чем аналогичный у указателя.
Это с чего такая уверенность? В любой "нормальной" реализации и с "нормальным" компилятором, в неотладочной версии это будет одно и тоже. Другое дело, что тут, массив статический (на стеке), если я правильно понимаю. А это значит что "не медленнее" будет boost::array т.е. такой же массив.
Здравствуйте, Aractan, Вы писали:
A>Здравствуйте, jazzer, Вы писали:
J>>нет желания прочитать какую-нть книжку по STL? или статьи хотя бы...
A>желание есть и книжка есть. просто еще есть ряд книжек которые я планирую прочитать до "про STL", хотя уже подумываю перерасставить приоритеты....
мудрое решение.
Потмоу что пока что все заданные тобой вопросы по STL — это RTFM, и они у тебя исчезнут автоматически по прочтении любой нормальной книги по STL.
BreQwaS wrote:
> Здравствуйте, Aractan, Вы писали: > > A>Какой из контейнеров будет работать не медленние массива в этом случае? > > Конкретно в этом — std::vector<int>. Причём вряд ли "не медленнее" — std::vector::operator[] определённо будет работать чуть дольше, чем аналогичный у указателя.
В подтверждение своих слов приведи результаты тестов. Судя по исходникам, я не вижу почему std::vector::operator[] может работать дольше.