replace,push_back,vector:约瑟夫环精简迷你版

本文通过C++代码示例介绍了如何使用标准库中的vector容器和算法进行高效的数据筛选。具体包括如何利用迭代器遍历容器、使用replace函数标记待删除元素,并最终收集有效元素到新的容器中。

// 

#include <iostream>

#include <vector>

#include <algorithm>

 

using namespace std;

 

 

 

int main (int, char *[])

{

const int sizeLegth = 10000;

 

 

vector<int> num1000;

vector<int> num;

int count = 0;

for(int size = 0;size < sizeLegth; ++size)

num1000.push_back(size);

 

vector<int>::iterator numIt = num1000.begin()-1;

for(numIt = num1000.begin()+2;numIt <= num1000.end()-1;numIt+=3)

 

{

replace(num1000.begin(), num1000.end(), *numIt, 0);//要删除的修改为0

//cout << *numIt << " ";//2 5 8 11 14 17 20 23 26 .....

}

 

//将值不为0的填入另一容器。

for(numIt=num1000.begin();numIt != num1000.end();++numIt)

{

if(0 == *numIt)continue;

num.push_back(*numIt);

++count;

 

}

 

cout << "reseult is: " << count <<endl; // 666

return 0;

}

### 处理复杂 JSON 对象的遍历与修改 当涉及复杂的 JSON 结构时,尤其是包含 `std::vector` 和嵌套结构的情况下,可以利用 nlohmann/json 提供的强大功能实现高效的数据操作。以下是详细的解答: --- #### 示例代码 以下代码展示了如何遍历并修改一个包含嵌套结构和 `std::vector` 的 JSON 对象。 ```cpp #include <iostream> #include <nlohmann/json.hpp> #include <string> #include <vector> using json = nlohmann::json; int main() { // 定义一个复杂的 JSON 对象 json complexJson = R"({ "users": [ {"id": 1, "details": {"name": "Alice", "roles": ["admin", "editor"]}}, {"id": 2, "details": {"name": "Bob", "roles": ["viewer"]}} ], "settings": { "theme": "dark", "notifications": true } })"_json; // 遍历 users 数组并对每个用户的 roles 添加新角色 if (complexJson.contains("users") && complexJson["users"].is_array()) { for (auto& user : complexJson["users"]) { if (user.contains("details") && user["details"].contains("roles") && user["details"]["roles"].is_array()) { // 向每个用户的角色列表中添加 "reader" user["details"]["roles"].push_back("reader"); // 修改 name 字段(如果需要) if (user["details"].contains("name") && user["details"]["name"].is_string()) { std::string modifiedName = user["details"]["name"]; modifiedName += "_modified"; user["details"]["name"] = modifiedName; } } } } // 修改 settings 中的主题设置 if (complexJson.contains("settings") && complexJson["settings"].is_object()) { if (complexJson["settings"].contains("theme") && complexJson["settings"]["theme"].is_string()) { complexJson["settings"]["theme"] = "light"; // 将主题改为 light } } // 打印修改后的 JSON 数据 std::cout << complexJson.dump(4) << std::endl; return 0; } ``` --- #### 代码解析 1. **初始化复杂 JSON 数据** 使用字符串字面量创建了一个包含多个层次的 JSON 对象,其中包括 `users` 数组和 `settings` 对象[^1]。 2. **遍历 `users` 数组** - 检查是否存在 `users` 并确认其为数组类型。 - 遍历数组中的每一个用户对象。 - 访问 `details.roles` 列表并向其中追加新的角色 `"reader"`。 - 修改 `details.name` 字段,在原名基础上附加 `_modified`。 3. **更新 `settings` 对象** - 检查是否存在 `settings` 并确认其为对象类型。 - 更新 `settings.theme` 的值为 `"light"`。 4. **输出结果** 使用 `dump(4)` 方法以格式化的形式打印最终的 JSON 数据[^1]。 --- #### 输出示例 运行上述代码后,程序会输出如下 JSON 数据结构: ```json { "users": [ { "id": 1, "details": { "name": "Alice_modified", "roles": [ "admin", "editor", "reader" ] } }, { "id": 2, "details": { "name": "Bob_modified", "roles": [ "viewer", "reader" ] } } ], "settings": { "theme": "light", "notifications": true } } ``` --- ### 关键点说明 1. **数据类型的检查** 在访问 JSON 数据前,始终应检查目标字段的存在性和具体类型(如数组、对象或基本类型),这有助于避免潜在的错误[^2]。 2. **灵活处理嵌套结构** 嵌套结构可以通过链式调用的方式逐步深入访问,例如 `complexJson["users"][i]["details"]["roles"]` 表达了对特定用户角色列表的访问。 3. **批量修改集合元素** 对于像 `std::vector` 这样的容器类型,可以直接通过 `.push_back()` 或其他方法对其进行增删改操作。 4. **序列化与反序列化扩展** 如果需要频繁地将自定义类实例与 JSON 互转,可考虑使用宏辅助工具简化流程[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值