Перейти к содержанию
    

STL Vector сводит с ума

простейший код

#include <windows.h>
#include <stdio.h>
#include <vector>

//------------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
    std::vector<int> vect_src, vect_rx1, vect_rx2, vect_rx3;

    for( int i = 0; i < 10; i++ )
        vect_src.push_back( i );

    printf( "original size=%d\n",  vect_src.size() );

    vect_rx1.insert( vect_rx1.end(), &vect_src[ 0 ], &vect_src[ vect_src.size() - 1 ] );
    vect_rx2.insert( vect_rx2.end(), &vect_src.at( 0 ), &vect_src.at( 9 ) );
    vect_rx3.insert( vect_rx3.end(), vect_src.begin(), vect_src.end() );

    printf( "size1=%d size2=%d size3=%d\n", vect_rx1.size(), vect_rx2.size(), vect_rx3.size() );

    return 0;
}

 

но почему получается 9 в первом и втором случае ?

original size=10

size1=9 size2=9 size3=10

добавить еденичку нельзя - схлопочешь out of range

 

 

P.S. через итератор варианты 1 и 2 заработали как надо, но блин почему более короткая и читаемая форма записи не работает - не понятно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

vec.insert = (vec.end(), a,b )

данные вставляются перед vec.end() от а до b не включая b. т.е. [a,b );

 

Вот последний и не вставляется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот последний и не вставляется.

 

а есть вариант вставить последний, используя индексы ?!

Иначе получается какое-то не полное решение применять эти индексы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В новом стандарте появилась удобная штука для таких целей: std::begin() и std::end(). Позволяет единообразно работать и с массивами и с контейнерами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...