Извините заранее за то, что у вас нет полного набора деталей, но я столкнулся с этим дома и теперь на работе. Также я новичок в STL, поэтому я уверен, что мой синтаксис где-то не прав.Сброс сердечника при создании вектора из диапазона векторов
Я пытаюсь изменить код визуализации субтитров omxplayer на перенос слов. Ввод представляет собой вектор типов InternalChar, где InternalChar является частной структурой typedef в классе, который я модифицирую. Код выполняет итерацию с помощью вектора поиска слов. Код выглядит так:
"input" имеет тип std :: vector. "output" - вектор таких векторов.
auto start=input.begin()
... мы тогда не (в данном конкретном случае) ввести цикл, который находит слово точку обруча, создает вектор из диапазона в «входе» и обновление «начать» соответственно ...
output[count] = std::vector<InternalChar>(start, input.end())
EDIT
Я думаю, что вполне может быть, используя следующую вместо выше:
output.push_back(std::vector<InternalChar>(start, input.end()));
END EDIT
GDB сообщает мне, что авария происходит на этой последней строке, глубоко внутри STL в какой-либо «своп-функции» или что-то в этом роде. Моя первая мысль заключалась в том, что мне нужно было использовать «input.end() - 1» в качестве конца диапазона, но это тоже происходит одинаково одинаково.
Мне также было интересно, есть ли проблема в том, что у InternalChar нет оператора присваивания, но это простая структура с членом bool и элементом char32_t, поэтому C++ может решить, как копировать из одного вектора в новый создал один.
Любая помощь будет очень признательна.
Множество возможных причин, мое первое предположение было бы за пределами доступа к «выходному» вектору. То есть count - < 0 or > = output.size(). – john
Я предполагаю, что 'output [count]' не выделен. Вероятно, вызов 'swap' выполняется во время назначения, поскольку rhs является временным. Либо «выход» должен быть создан с нужным размером, либо вам нужно использовать 'output.push_back' для добавления к вектору и его автоматического роста. Но без кода, который просто догадывается. –
@Adam Думая об этом, я думаю, что использовал push_back, а не индексированный доступ. Но вдруг я не уверен. И я не предварительно выделил какую-либо память, так что это возможно. – AlastairG