如何为get_ABCD()添加参数以对指定vector<string>执行迭代器操作
问题解答
完全可以实现你要的get_ABCD(possible_hosts)调用效果,改造前先修正你原有代码的不规范问题:C++标准不允许在函数内部嵌套定义其他函数,你当前把get_ABCD()写在main()里的写法不符合标准,仅部分编译器的扩展支持该写法,兼容性极差,建议把get_ABCD()移到全局作用域。
改造方案
给get_ABCD()增加一个std::vector<std::string>&类型的入参即可,引用类型可以避免vector拷贝,同时支持直接修改传入的原vector:
- 如果只需要对传入的vector做读操作,可以加const修饰:
const std::vector<std::string>& target_vec - 如果你需要对传入vector做shuffle这类修改操作,直接用左值引用即可
完整修正代码示例
#include <iostream> #include <vector> #include <string> #include <cstdlib> #include <algorithm> // 假设这两个全局数组是你原有代码里定义的,此处补全避免编译错误 std::string final_years[] = {"2021", "2022", "2023", "2024", "2025"}; std::string hosts[] = {"host1", "host2", "host3", "host4", "host5"}; // 改造后的get_ABCD,支持传入指定vector<string>操作 void get_ABCD(std::vector<std::string>& target_vec) { // 迭代器直接操作传入的target_vec std::vector<std::string>::iterator it; std::random_shuffle(target_vec.begin(), target_vec.end()); for (it = target_vec.begin(); it < target_vec.end(); it++) { std::cout << "\n" << *it << "\n"; } } int main() { // 你原有生成vector的逻辑移到main里 std::vector<int> rand4w = {0,1,2,3}; // 此处你可以替换成自己的随机数生成逻辑 std::vector<std::string> possible_answers = { final_years[rand4w[0]], final_years[rand4w[1]], final_years[rand4w[2]], final_years[rand4w[3]] }; std::vector<std::string> possible_hosts = { hosts[rand4w[0]], hosts[rand4w[1]], hosts[rand4w[2]], hosts[rand4w[3]] }; // 按你需要的调用方式传入指定vector即可 std::cout << "shuffle possible_answers结果:" << std::endl; get_ABCD(possible_answers); std::cout << "\nshuffle possible_hosts结果:" << std::endl; get_ABCD(possible_hosts); system("pause"); return 0; }
补充说明
- 你如果需要把生成随机4元素的逻辑也封装到
get_ABCD里,可以再加一个入参传入源数组,灵活度更高 std::random_shuffle在C++17及更高版本中已被废弃,如果你用的是新编译器,建议替换为<random>库中的std::shuffle接口,随机性和安全性更好
内容的提问来源于stack exchange,提问作者Alex Pina
相关产品推荐
相关产品推荐

