反向复制数组
Copy array in 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 函数?
您可以将 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; });
你可以使用for循环直接push items,唯一不同的是第二个for循环会倒序添加item,并且改变了符号。
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]<<" ";
}
我想以相反的顺序复制一个数组到同一个数组的末尾,同时改变值的代数符号。
是这样的:
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 函数?
您可以将 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; });
你可以使用for循环直接push items,唯一不同的是第二个for循环会倒序添加item,并且改变了符号。
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]<<" ";
}