добавить в вектор, не копируя данные структуры

Предположительно, это простой вопрос на С++, но я заново изучаю С++ и не знаю некоторых из них. основы. У меня есть класс, который включает в себя структуру с вектором объектов в ней, поэтому что-то вроде этого:

struct my_struct{
    Irrelevant_Object object,
    vector<tuple> tuple_list;
}

Структура и кортеж (другая структура )предопределены архитектурой и даны мне в моем методе; поэтому я не могу их изменить. Я хочу сгенерировать и вставить кортеж в исходно пустой список кортежей _.

Простое решение — использовать метод, который выделяет новый объект кортежа, заполняет данные кортежа, затем вызывает кортеж _list.push _назад ()и передает выделенный кортеж.Но это потребует выделения нового кортежа только для того, чтобы метод push _назад скопировал все содержимое (большой )структуры кортежа в уже определенное пространство памяти вектора. Поэтому я оплачиваю расходы на выделение/удаление, а также меньшие расходы на копирование содержимого кортежа в вектор, чтобы сделать это таким образом. Это кажется довольно неэффективным, и, поскольку этот метод находится на критическом пути функции, я бы предпочел что-то более быстрое, (по общему признанию, я сомневаюсь, что этот метод будет узким -горлышком, и я знаю, что ранняя оптимизация == плохая. Тем не менее, я задаю этот вопрос больше, чтобы узнать что-то о синтаксисе C++, а не из-за острой необходимости сделать это в моем коде ).

Итак, мой вопрос: есть ли более быстрый способ заполнить содержимое моего списка кортежей без выделения и копирования кортежа? Если бы это был массив, я мог бы сделать массив настолько большим, насколько захочу, а затем передать ссылку на кортеж _list[0] на функцию, создающую кортеж. Таким образом, функция могла заполнить пустое содержимое уже выделенного кортежа внутри массива без выделения нового или копирования из одного кортежа в другой. Я попытался сделать это с вектором из любопытства и закончил с ошибкой seg, когда мой итератор указывал на 0x0, поэтому я предполагаю, что синтаксис не работает для векторов. Так есть ли быстрый способ выполнить это задание?

Поскольку это вопрос как для изучения языка, так и для фактического использования, не стесняйтесь добавлять любые другие косвенно относящиеся к делу вещи, которые вы считаете интересными, я хочу учиться.

Спасибо.

9
задан dsollen 7 May 2012 в 20:03
поделиться