|
VC++如何将vector附加到另外一个同结构的vector中
在 C++ 中,可以使用 `std::vector` 的 `insert` 方法将一个 `std::vector` 附加到另一个同结构的 `std::vector` 中。下面是一个示例,展示了如何将一个 `std::vector` 附加到另一个同结构的 `std::vector` 中:
- ```cpp
- #include <iostream>
- #include <vector>
- // 定义一个结构体
- struct Person {
- std::string name;
- int age;
- };
- int main() {
- // 创建第一个vector并添加一些Person结构体实例
- std::vector<Person> people1 = {
- {"Alice", 30},
- {"Bob", 25}
- };
- // 创建第二个vector并添加一些Person结构体实例
- std::vector<Person> people2 = {
- {"Charlie", 35},
- {"David", 28}
- };
- // 使用insert方法将people2附加到people1
- people1.insert(people1.end(), people2.begin(), people2.end());
- // 输出结果以验证
- for (const auto& person : people1) {
- std::cout << "姓名: " << person.name << ", 年龄: " << person.age << std::endl;
- }
- return 0;
- }
- ```
复制代码
### 代码说明:
1. **结构体定义**:我们定义了一个名为 `Person` 的结构体,包含 `name` 和 `age` 两个成员。
2. **创建向量**:创建了两个 `std::vector<Person>`,分别命名为 `people1` 和 `people2`,并添加了一些 `Person` 实例。
3. **附加向量**:使用 `insert` 方法将 `people2` 中的所有元素附加到 `people1` 中。`people1.end()` 表示在 `people1` 的末尾插入,`people2.begin()` 和 `people2.end()` 表示要插入的范围。
4. **输出结果**:最后,遍历 `people1` 并输出每个 `Person` 的姓名和年龄,以验证结果。
这样,你就可以将一个 `std::vector` 附加到另一个同结构的 `std::vector` 中。
我们可以在插入之前检查姓名是否已经存在于目标 `std::vector` 中。如果不存在,则插入;如果存在,则跳过插入。以下是修改后的代码示例:
- ```cpp
- #include <iostream>
- #include <vector>
- #include <algorithm> // 包含std::find_if
- // 定义一个结构体
- struct Person {
- std::string name;
- int age;
- };
- // 函数:检查姓名是否存在
- bool nameExists(const std::vector<Person>& people, const std::string& name) {
- return std::any_of(people.begin(), people.end(),
- [&name](const Person& p) {
- return p.name == name;
- });
- }
- // 函数:将一个vector附加到另一个vector中,且不插入重复姓名
- void appendUnique(std::vector<Person>& target, const std::vector<Person>& source) {
- for (const auto& person : source) {
- if (!nameExists(target, person.name)) {
- target.push_back(person);
- }
- }
- }
- int main() {
- // 创建第一个vector并添加一些Person结构体实例
- std::vector<Person> people1 = {
- {"Alice", 30},
- {"Bob", 25}
- };
- // 创建第二个vector并添加一些Person结构体实例
- std::vector<Person> people2 = {
- {"Charlie", 35},
- {"David", 28},
- {"Alice", 32} // 重复姓名
- };
- // 将people2附加到people1,且不插入重复姓名
- appendUnique(people1, people2);
- // 输出结果以验证
- for (const auto& person : people1) {
- std::cout << "姓名: " << person.name << ", 年龄: " << person.age << std::endl;
- }
- return 0;
- }
- ```
复制代码
### 代码说明:
1. **姓名检查函数**:我们定义了一个名为 `nameExists` 的函数,用于检查给定姓名是否存在于 `std::vector<Person>` 中。
2. **附加唯一元素的函数**:我们定义了一个名为 `appendUnique` 的函数,该函数将 `source` 向量中的元素附加到 `target` 向量中,前提是该元素的姓名在 `target` 中不存在。
3. **主函数**:在主函数中,我们创建了两个 `std::vector<Person>`,并调用 `appendUnique` 函数将 `people2` 附加到 `people1` 中,且不插入重复的姓名。
这样,只有在姓名不重复的情况下,才会将 `source` 向量中的元素添加到 `target` 向量中。
|
|