C++中如何从vector打印单个元素及实现元素间切换打印?
实现Vector中City元素的单元素打印与切换功能
没问题,这两个需求其实很好实现,我们只需要给World类增加一个索引跟踪变量,再配合几个简单的方法就能搞定。下面一步步来拆解实现:
1. 先给World类添加索引跟踪变量
首先在World类的私有成员里加一个变量,用来记录当前选中的城市索引,这样切换的时候就有参照了。记得在构造函数里初始化它:
class World { private: std::vector<City*> m_cities; int m_currentCityIndex; // 新增:跟踪当前选中的城市索引 public: World() : m_currentCityIndex(0) {} // 构造函数初始化索引为0 ~World(); // 记得要写析构函数释放内存 void vytvorMesta(); void printSingleCity(int index); void switchToNextCity(); void switchToPrevCity(); };
注意:如果你的
m_cities可能为空,最好在构造函数或者使用前加个判断,避免初始索引无效。
2. 实现单个元素打印方法
写一个专门打印指定索引城市的方法,核心是做边界检查(防止越界访问vector),然后调用City类的打印逻辑:
void World::printSingleCity(int index) { // 先判断索引是否合法 if (index < 0 || index >= m_cities.size()) { std::cout << "错误:无效的城市索引!" << std::endl; return; } // 假设City类有自己的打印方法,比如printInfo() m_cities[index]->printInfo(); // 如果City类没有单独的打印方法,也可以直接输出成员变量(如果是public或者有getter的话): // std::cout << "城市:" << m_cities[index]->getName() << ",人口:" << m_cities[index]->getPopulation() << std::endl; }
3. 实现元素切换并打印的方法
我们可以做两个直观的切换方法:切换到下一个城市、切换到上一个城市,同时处理循环边界(比如最后一个城市之后回到第一个,第一个之前跳到最后一个):
切换到下一个城市并打印
void World::switchToNextCity() { if (m_cities.empty()) { std::cout << "提示:没有城市可以切换!" << std::endl; return; } // 索引自增,用取模实现循环 m_currentCityIndex = (m_currentCityIndex + 1) % m_cities.size(); // 打印切换后的城市 printSingleCity(m_currentCityIndex); }
切换到上一个城市并打印
void World::switchToPrevCity() { if (m_cities.empty()) { std::cout << "提示:没有城市可以切换!" << std::endl; return; } // 索引自减,加size再取模避免负数 m_currentCityIndex = (m_currentCityIndex - 1 + m_cities.size()) % m_cities.size(); printSingleCity(m_currentCityIndex); }
4. 别忘了内存管理
因为你用new创建了City对象,一定要在World的析构函数里释放内存,避免内存泄漏:
World::~World() { for (City* city : m_cities) { delete city; } m_cities.clear(); }
使用示例
在main函数里可以这样调用:
int main() { World myWorld; myWorld.vytvorMesta(); // 打印索引为1的城市(第二个城市,因为vector索引从0开始) myWorld.printSingleCity(1); // 切换到下一个城市并打印 std::cout << "\n切换到下一个城市:" << std::endl; myWorld.switchToNextCity(); // 再切换一次下一个 std::cout << "\n再次切换到下一个城市:" << std::endl; myWorld.switchToNextCity(); // 切换到上一个城市并打印 std::cout << "\n切换到上一个城市:" << std::endl; myWorld.switchToPrevCity(); return 0; }
内容的提问来源于stack exchange,提问作者spammik
相关产品推荐
相关产品推荐

