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

C++刀切法向量输出:如何避免循环外额外调用打印?

解决C++刀切法向量生成的循环打印问题

问题根源

你遇到的额外打印问题,大概率是循环范围写错了——比如循环只遍历了前n-1个元素索引,漏掉了最后一个元素的移除场景,所以不得不额外补一次打印。

修正方案

只需要确保循环覆盖所有n个元素的索引(从0到n-1),每次循环内完成「移除对应索引元素+打印」的操作即可,不需要额外执行打印。

基础实现代码

#include <vector>
#include <iostream>

void printVector(const std::vector<int>& vec) {
    std::cout << "[";
    for (size_t j = 0; j < vec.size(); ++j) {
        if (j > 0) std::cout << " ";
        std::cout << vec[j];
    }
    std::cout << "]\n";
}

int main() {
    std::vector<int> original = {0, 1, 2, 3};
    size_t n = original.size();

    // 遍历所有要移除的元素索引,0到n-1全覆盖
    for (size_t i = 0; i < n; ++i) {
        std::vector<int> temp;
        // 复制除第i个元素外的所有内容
        for (size_t j = 0; j < n; ++j) {
            if (j != i) {
                temp.push_back(original[j]);
            }
        }
        // 直接在循环内打印,无需额外操作
        printVector(temp);
    }

    return 0;
}

更高效的实现(利用vector迭代器)

可以借助vector的区间构造和插入方法,省去内层循环,代码更简洁高效:

#include <vector>
#include <iostream>

void printVector(const std::vector<int>& vec) {
    std::cout << "[";
    for (size_t j = 0; j < vec.size(); ++j) {
        if (j > 0) std::cout << " ";
        std::cout << vec[j];
    }
    std::cout << "]\n";
}

int main() {
    std::vector<int> original = {0, 1, 2, 3};
    size_t n = original.size();

    for (size_t i = 0; i < n; ++i) {
        // 直接构造前半段+插入后半段,跳过第i个元素
        std::vector<int> temp(original.begin(), original.begin() + i);
        temp.insert(temp.end(), original.begin() + i + 1, original.end());
        printVector(temp);
    }

    return 0;
}

关键修改点

把原来的循环终止条件(比如i < n-1)改成i < n,确保每个元素的移除场景都被处理到,循环内完成所有打印操作,自然不需要额外补打。

内容的提问来源于stack exchange,提问作者Sokaekae

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:55:10