反向复制数组

时间:2016-04-13 11:13:26

标签: c++ arrays reverse

我想以相反的顺序将数组复制到同一个数组的末尾,同时更改值的代数符号。

它是这样的:

void foo()
{
    std::vector<int> vec;
    for(int = 0; i < 5; i++)
    {
        vec.push_back(i);
    }

    //Now i want the values in vec to be copied to the end in reverse order.
    //I would like to have something like that :
    std::copy(std::end(vec), std::begin(vec), std::back_inserter(vec))

    //so now vec should look like: 0 1 2 3 4 4 3 2 1 0
    //But I want: 0 1 2 3 4 -4 -3 -2 -1 -0

}

是否已存在std标准函数,我可以调整以执行我想要的操作(如partition_copy或其他)或者我是否可能必须使用自己的东西,例如std :: for_each和适当的lambda函数?

2 个答案:

答案 0 :(得分:7)

您可以将std::transform与反向迭代器结合使用:

vec.reserve(2 * vec.size());  // guarantee iterator validity

std::transform(std::rbegin(vec), std::rend(vec),
               std::back_inserter(vec), [](int n) { return -n; });

答案 1 :(得分:0)

您可以使用for循环直接推送项目,唯一的区别是第二个for循环将以相反的顺序添加项目和更改符号中的项目。

void foo()
{
std::vector<int> vec;
int i;
for( i=0; i<5; i++ )        //Loop to Add Items
        vec.push_back(i);
for( i=4; i>=0; i-- )       //Loop to Add Items in Reverse Order with Signs Changed
        vec.push_back( i * -1 );
for( i=0; i<vec.size(); i++ )
        cout<<vec[i]<<" ";
}