Std :: copy_n does not resize the target vector

If I reserve some space for the vector and then copy some values ​​in it with std::copy_n(), I will get the values ​​copied correctly and available, but the size of the vector is still zero. Is this expected behavior? Should I resize the vector instead, even if it is not so efficient?

#include <algorithm>
#include <iostream>
#include <vector>

int main()
{
    std::vector<double> src, dest;

    for(double x = 0.0; x < 100.0; ++x)
        src.push_back(x);

    dest.reserve(src.size());

    std::copy_n(src.cbegin(), src.size(), dest.begin());

    std::cout << "src.size() = " << src.size() << std::endl;
    std::cout << "dest.size() = " << dest.size() << std::endl;

    for(size_t i = 0; i < src.size(); ++i)
        std::cout << dest[i] << "  ";

}

Compiled Compilers: clang, gcc, Visual C ++

+4
source share
4 answers

but the size of the vector is still zero

std::copy_n , ; . , undefined, , .

, ?

, std::vector::resize std::vector::reserve . , , resize, copy_n.

std:: back_inserter, , - push_back() (.. ), . .

dest.reserve(src.size());
std::copy_n(src.cbegin(), src.size(), std::back_inserter(dest));
+5

, , , , . , . , , , ; , .

, std::copy_n, , . dest.resize(src.size());, dest.reserve(std.size());.

, , , , std::back_inserter(dest) dest.begin().

+2

A std::vector . , , . , .

0

dest reserve, , UB. resize, , .

dest.resize(src.size());
std::copy_n(src.cbegin(), src.size(), dest.begin());

std::cout << "src.size() = " << src.size() << std::endl;
std::cout << "dest.size() = " << dest.size() << std::endl;

for(size_t i = 0; i < src.size(); ++i)
    std::cout << dest[i] << "  ";
0

Source: https://habr.com/ru/post/1668819/


All Articles