You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:28:38