реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> STL Vector сводит с ума
megajohn
сообщение Sep 15 2017, 13:00
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



простейший код
Код
#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 заработали как надо, но блин почему более короткая и читаемая форма записи не работает - не понятно


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Swup
сообщение Sep 15 2017, 13:27
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970



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

Вот последний и не вставляется.
Go to the top of the page
 
+Quote Post
megajohn
сообщение Sep 15 2017, 13:35
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(Swup @ Sep 15 2017, 16:27) *
Вот последний и не вставляется.


а есть вариант вставить последний, используя индексы ?!
Иначе получается какое-то не полное решение применять эти индексы


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
Swup
сообщение Sep 15 2017, 13:41
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970



Код
vec.insert = (vec.end(), a, b+1 )

Почему бы и нет.
Go to the top of the page
 
+Quote Post
megajohn
сообщение Sep 15 2017, 13:55
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(Swup @ Sep 15 2017, 16:41) *
Почему бы и нет.


да, за индексом и не попробовал. Спасибо


del


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 15 2017, 22:15
Сообщение #6


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th July 2025 - 13:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01416 секунд с 7
ELECTRONIX ©2004-2016