Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C++;_C++_Algorithm - Fatal编程技术网

C++ 在C++;

C++ 在C++;,c++,algorithm,C++,Algorithm,假设我有两个非常量迭代器开始和结束。我想用其他两个迭代器之间的值完全替换begin和end之间的范围。我知道对于非常量迭代器,我可以使用以下语法 *begin = *result.begin(); *end = *result.end(); 但这只会更改begin和end迭代器后面的值 更准确地说。 我有一个初始向量 {1, 2, 3, 4, 5, 6, 7} ^ ^ begin end 还有一个

假设我有两个非常量迭代器开始和结束。我想用其他两个迭代器之间的值完全替换begin和end之间的范围。我知道对于非常量迭代器,我可以使用以下语法

*begin = *result.begin();
*end = *result.end();
但这只会更改begin和end迭代器后面的值

更准确地说。 我有一个初始向量

          {1, 2, 3, 4, 5, 6, 7}
           ^           ^
         begin        end 
还有一个叫做result的向量,它包含

       {6, 6, 3, 5, 4, 13, 99}
           ^           ^
         begin        end 

最后,我希望我的初始数组看起来像

       {6, 3, 5, 4, 5, 6, 7}

使用
std::copy

std::copy(begin2, end2, begin1);
它将
begin
end
之间的范围复制到另一个范围,该范围从
begin
开始。请注意,所有这些迭代器都是不同的,因此我将它们称为
1
2

使用,可以这样做:

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

void printVector(const std::vector<int>& v) {
    bool first = true;
    std::cout << '{';
    for (int i : v) {
        if (!first) std::cout << ", ";
        std::cout << i;
        first = false;
    }
    std::cout << "}\n";
}

int main(void) {
    std::vector<int> v1 = {1, 2, 3, 4, 5, 6, 7};
    std::vector<int> v2 = {6, 6, 3, 5, 4, 13, 99};

    printVector(v1);
    printVector(v2);

    std::vector<int>::iterator dest_begin = v1.begin();
    std::vector<int>::iterator src_begin = std::next(v2.begin(), 1);
    std::vector<int>::iterator src_end = std::next(v2.begin(), 5);

    std::copy(src_begin, src_end, dest_begin);

    printVector(v1);

    return 0;
}

让我们看看你到目前为止都做了些什么。向我们显示您的代码以及您被卡住的确切位置。如果
end
result.end()
实际上是一个end迭代器(例如,由标准容器的
.end()
成员函数返回),则
*end=*result.end()
给出未定义的行为。
{1, 2, 3, 4, 5, 6, 7}
{6, 6, 3, 5, 4, 13, 99}
{6, 3, 5, 4, 5, 6, 7}