C++学习_算法_九(二)

复制

复制操作都会覆盖掉原有的元素

普通复制

使用copy()函数

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


using namespace std;

int main() {
    vector<int> a = {2, 4, 6, 6};
    vector<int> b(4);
    copy(a.begin(), a.end(), b.begin());
    for(auto it = b.begin(); it != b.end(); it++) {
        cout << *it << " ";
    }
    return 0;
}

复制n个元素

使用copy_n()

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


using namespace std;

int main() {
    vector<int> a = {2, 4, 6, 6};
    vector<int> b(3);
    copy_n(a.begin(), 3, b.begin());
    for(auto it = b.begin(); it != b.end(); it++) {
        cout << *it << " ";
    }
    return 0;
}

条件复制

使用copy_if()函数

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


using namespace std;

int main() {
    vector<int> a = {2, 4, 6, 6};
    vector<int> b(3);
    copy_if(a.begin(), a.end(), b.begin(), [](int i) {
        return i < 6;
    });
    for(auto it = b.begin(); it != b.end(); it++) {
        cout << *it << " ";
    }
    return 0;
}

从背后复制

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


using namespace std;

int main() {
    vector<int> a = {2, 4, 6, 6};
    vector<int> b(4);
    copy_backward(a.begin(), a.begin() + 3, b.end());
    for(auto it = b.begin(); it != b.end(); it++) {
        cout << *it << " ";
    }
    return 0;
}

移动操作

移动操作与复制操作差不多

普通移动操作

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


using namespace std;

int main() {
    vector<int> a = {2, 4, 6, 6};
    vector<int> b(4);
    move(a.begin(), a.end(), b.begin());
    for(auto it = a.begin(); it != a.end(); it++) {
        cout << *it << " ";
    }
    cout << "\n";
    for(auto it = b.begin(); it != b.end(); it++) {
        cout << *it << " ";
    }
    return 0;
}

从后面移动

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


using namespace std;

int main() {
    vector<int> a = {2, 4, 6, 6};
    vector<int> b(4);
    move_backward(a.begin(), a.end(), b.end());
    for(auto it = a.begin(); it != a.end(); it++) {
        cout << *it << " ";
    }
    cout << "\n";
    for(auto it = b.begin(); it != b.end(); it++) {
        cout << *it << " ";
    }
    return 0;
}

对换

对换既可以对换两个数,又可以对换两个数组

普通对换

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


using namespace std;

int main() {
    int x = 10;
    int y = 20;
    swap(x, y);
    cout << "x: " << x << "  " << "y: " << y << "\n";
    vector<int> a(4, 10);
    vector<int> b(4, 20);
    swap(a, b);
    for(auto it = a.begin(); it != a.end(); it++) {
        cout << *it << " ";
    }
    cout << "\n";
    for(auto it = b.begin(); it != b.end(); it++) {
        cout << *it << " ";
    }
    return 0;
}

范围交换

使用swap_range()函数

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


using namespace std;

int main() {
    vector<int> a(4, 10);
    vector<int> b(4, 20);
    swap_ranges(a.begin() + 1, a.end() - 1, b.begin());
    for(auto it = a.begin(); it != a.end(); it++) {
        cout << *it << " ";
    }
    cout << "\n";
    for(auto it = b.begin(); it != b.end(); it++) {
        cout << *it << " ";
    }
    return 0;
}

迭代器交换

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


using namespace std;

int main() {
    vector<int> a(4, 10);
    vector<int> b(4, 20);
    iter_swap(a.begin(), b.begin());
    for(auto it = a.begin(); it != a.end(); it++) {
        cout << *it << " ";
    }
    cout << "\n";
    for(auto it = b.begin(); it != b.end(); it++) {
        cout << *it << " ";
    }
    return 0;
}

转换

主要是通过一个lambda表达式来转换,并且把转换的结果赋到另一个序列中

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


using namespace std;

int main() {
    vector<int> a(4, 10);
    vector<int> b(4, 20);
    transform(a.begin(), a.end(), b.begin(), [](int i) {
        return ++i;
    });
    for(auto it = a.begin(); it != a.end(); it++) {
        cout << *it << " ";
    }
    cout << "\n";
    for(auto it = b.begin(); it != b.end(); it++) {
        cout << *it << " ";
    }
    return 0;
}

替换

普通替换

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


using namespace std;

int main() {
    vector<int> a = {10, 30, 10, 50};
    vector<int> b(4, 20);
    //将迭代器范围内的所有10替换为20
    replace(a.begin(), a.end(), 10, 20);
    for(auto it = a.begin(); it != a.end(); it++) {
        cout << *it << " ";
    }
    cout << "\n";
    for(auto it = b.begin(); it != b.end(); it++) {
        cout << *it << " ";
    }
    return 0;
}

条件替换

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


using namespace std;

int main() {
    vector<int> a = {10, 30, 10, 50};
    vector<int> b(4, 20);
    replace_if(a.begin(), a.end(), [](int i) {
        return i == 30;
    }, 20);
    for(auto it = a.begin(); it != a.end(); it++) {
        cout << *it << " ";
    }
    cout << "\n";
    for(auto it = b.begin(); it != b.end(); it++) {
        cout << *it << " ";
    }
    return 0;
}

替换副本

将副本进行替换后再复制到

??正文结束??
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值