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

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

db.students.aggregate([
    {
        '$addFields': {
            'absences': {
                '$map': {
                    'input': '$absences', 
                    'as': 'absence', 
                    'in': {
                        'date': {
                            '$toDate': {
                                '$substr': [
                                    '$absence.date', 0, {
                                        '$subtract': [
                                            {
                                                '$strLenCP': '$absence.date'
                                            }, 5
                                        ]
                                    }
                                ]
                            }
                        }, 
                        'code': '$absence.code', 
                        'type': '$absence.type', 
                        'isPartial': '$absence.isPartial'
                    }
                }
            }
        }
    }, {
        '$out': 'students'
    }
])
141
задан gsamaras 20 July 2016 в 02:23
поделиться

4 ответа

Ваш второй пример не работает при отправке аргумента ссылкой. Вы имели в виду

void copyVecFast(vec<int> original) // no reference
{

  vector<int> new_;
  new_.swap(original); 
}

, Который будет работать, но более легкий путь

vector<int> new_(original);
112
ответ дан 23 November 2019 в 23:08
поделиться

Они не то же хотя, не так ли? Каждый - копия, другой подкачка . Следовательно имена функций.

Мой фаворит:

a = b;

, Где a и b векторы.

231
ответ дан 23 November 2019 в 23:08
поделиться

Это - другой допустимый способ сделать копию вектора, просто использовать его конструктора:

std::vector<int> newvector(oldvector);

Это еще более просто, чем использование std::copy для обхода всего вектора от начала до конца к std::back_insert их в новый вектор.

Однако Ваш .swap() каждый не копия, вместо этого она подкачивает эти два вектора. Вы изменили бы оригинал для не содержания чего-либо больше! Который не является копией.

69
ответ дан 23 November 2019 в 23:08
поделиться

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

передают оригинал в качестве параметра новому вместо этого.

14
ответ дан 23 November 2019 в 23:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: