📜  C++ STL-algorithm.fill()函数(1)

📅  最后修改于: 2023-12-03 14:39:50.522000             🧑  作者: Mango

C++ STL-algorithm.fill()函数

在C++ STL库中,algorithm.fill()函数用于复制给定元素于容器中。

fill()函数需要两个参数:第一个参数是容器的起始地址,第二个参数是元素的值。

以下是fill()函数的语法:

fill(start, end, value);
  • start:起始迭代器,表示填充的起始位置。
  • end:结束迭代器,表示填充的结束位置。
  • value:要复制的元素。
例子

使用fill()函数将vector容器中的所有元素改为7:

#include<bits/stdc++.h>
using namespace std;

int main() {
    vector<int> vec{1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
    fill(vec.begin(), vec.end(), 7);

    for(auto i : vec) {
        cout << i << " ";
    }

    return 0;
}

输出:

7 7 7 7 7 7 7 7 7 7
使用自定义数据类型

除了基本数据类型,fill()函数还可以用于自定义数据类型。

创建一个自定义Person结构体:

struct Person {
    string name;
    int age;
};

使用fill()函数将vector容器中的所有元素均改为Person结构体类型的初始内容:

#include<bits/stdc++.h>
using namespace std;

struct Person {
    string name;
    int age;
};

int main() {
    vector<Person> vecPerson(5); // 容器 vecPerson 长度为 5

    Person p1 = {"Jack", 30};
    Person p2 = {"Tom", 18};
    Person p3 = {"Bob", 21};

    fill(vecPerson.begin(), vecPerson.end(), p1); 
    // 使用 p1 填充

    for(auto it = vecPerson.begin(); it != vecPerson.end(); ++it) {
        cout << it->name << " " << it->age << endl;
    }

    fill(vecPerson.begin(), vecPerson.end() - 2, p2); 
    // 使用 p2 填充前面 3 个元素

    for(auto it = vecPerson.begin(); it != vecPerson.end(); ++it) {
        cout << it->name << " " << it->age << endl;
    }

    fill(vecPerson.begin() + 1, vecPerson.end() - 1, p3); 
    // 使用 p3 填充中间的 3 个元素

    for(auto it = vecPerson.begin(); it != vecPerson.end(); ++it) {
        cout << it->name << " " << it->age << endl;
    }

    return 0;
}

输出结果:

Jack 30
Jack 30
Jack 30
Jack 30
Jack 30

Jack 30
Tom 18
Tom 18
Tom 18
Jack 30

Jack 30
Bob 21
Bob 21
Bob 21
Jack 30

在上述示例中,仅对vector容器的一部分使用了fill()函数,其余部分未受到任何影响。

总结

fill()函数可用于复制给定元素于容器中,同时支持基本类型和自定义类型。它的语法简单易懂,使用时需要确保在正确位置使用这个函数以避免潜在的错误。