为何无法将vector元素赋值给另一vector?reverse_vector函数编译报错
解决reverse_vector函数的编译错误
错误原因
编译器报错核心是类型不匹配:你定义的extra是vector<string>类型,而lines[i]是单个string对象,C++没有定义这两种类型的赋值运算符,因此无法直接赋值。
附带逻辑问题
原代码的循环逻辑也存在错误:遍历整个vector长度会导致每个元素被交换两次,最终vector会回到初始状态,根本达不到反转效果,正确做法是只循环vector长度的一半。
修正后的代码
#include <iostream> #include <vector> #include <string> using namespace std; void reverse_vector(vector<string>& lines){ string extra; // 改为string类型,匹配要存储的单个字符串 int n = lines.size(); for(int i = 0; i < n / 2; i++){ // 仅循环一半元素,避免重复交换 extra = lines[i]; lines[i] = lines[n - 1 - i]; lines[n - 1 - i] = extra; } // 打印反转后的结果(可选) for(const auto& str : lines){ cout << str << " "; } cout << endl; }
关键修改点
- 将
vector<string> extra改为string extra,让赋值操作的左右操作数类型一致 - 循环终止条件改为
i < lines.size()/2,确保每个元素只交换一次 - 提前计算
lines.size()并存入变量n,减少重复计算开销
内容的提问来源于stack exchange,提问作者Neha Ghosh
相关产品推荐
相关产品推荐

