megajohn 3 15 сентября, 2017 Опубликовано 15 сентября, 2017 · Жалоба простейший код #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 заработали как надо, но блин почему более короткая и читаемая форма записи не работает - не понятно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 15 сентября, 2017 Опубликовано 15 сентября, 2017 · Жалоба vec.insert = (vec.end(), a,b ) данные вставляются перед vec.end() от а до b не включая b. т.е. [a,b ); Вот последний и не вставляется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 3 15 сентября, 2017 Опубликовано 15 сентября, 2017 · Жалоба Вот последний и не вставляется. а есть вариант вставить последний, используя индексы ?! Иначе получается какое-то не полное решение применять эти индексы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 15 сентября, 2017 Опубликовано 15 сентября, 2017 · Жалоба vec.insert = (vec.end(), a, b+1 ) Почему бы и нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 3 15 сентября, 2017 Опубликовано 15 сентября, 2017 · Жалоба Почему бы и нет. да, за индексом и не попробовал. Спасибо del Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 15 сентября, 2017 Опубликовано 15 сентября, 2017 · Жалоба В новом стандарте появилась удобная штука для таких целей: std::begin() и std::end(). Позволяет единообразно работать и с массивами и с контейнерами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться