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
相关产品推荐
相关产品推荐

