关于合并两个列表的算法的一些问题
Some problem about the algorithm of merging two lists
当我练习编写合并两个列表的算法时,我遇到了一些问题。
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int> list1,list2;
int tmp;
cin>>tmp;
while(tmp!=-1){
list1.push_back(tmp);
cin>>tmp;
}
cin>>tmp;
while(tmp!=-1){
list2.push_back(tmp);
cin>>tmp;
}
vector<int> list3(list1.size()+list2.size());
vector<int>::iterator iter1=list1.begin();
vector<int>::iterator iter2=list2.begin();
while(iter1!=list1.end()&&iter2!=list2.end()){
if(*iter1<*iter2){
list3.push_back(*iter1);
iter1++;
}
else{
list3.push_back(*iter2);
iter2++;
}
}
while(iter1!=list1.end()){
list3.push_back(*iter1);
iter1++;
}
while(iter2!=list2.end()){
list3.push_back(*iter2);
iter2++;
}
if(list3.size()==0) cout<<"NULL";
for(int i=0;i<list3.size();i++){
cout<<list3[i];
if(i!=list3.size()-1){
cout<<" ";
}
}
return 0;
}
控制台输入:
13 5 -1
2 4 6 8 10 -1
预期输出结果:1 2 3 4 5 6 8 10
实际输出结果:0 0 0 0 0 0 0 0 1 2 3 4 5 6 8 10
vector<int> list3(list1.size()+list2.size());
应该是
vector<int> list3;
第一个构造函数使用 N+M 个元素初始化向量,所有元素都初始化为 0,push_back
末尾附加更多元素。有关 std::vector 构造函数的更多信息,请参阅此页面。
行
vector<int> list3(list1.size()+list2.size());
创建 int
类型的向量并插入list1.size()+list2.size()
默认构造元素。您希望创建类型 int
的空向量并为list1.size()+list2.size()
元素保留内存。用
vector<int> list3;
list3.reserve(list1.size()+list2.size());
替换 vector<int> list3(list1.size()+list2.size())
;
与vector<int> list3;
的 Vector 时,您将拥有值为 0 的 X 元素。然后你使用list3.push_back(Y);
它将在向量的末尾添加元素 Y。如果声明一个空向量并使用list3.push_back(Y);
则向量中只有一个元素 Y。
相关文章:
- 算法问题:查找从堆栈中弹出的所有序列
- 到连接组件算法的问题(递归)
- 读取最后一行代码算法 - c++ 时出现问题
- 需要为 C++ 中的以下问题设计递归算法
- 我的C++语言蛮力算法有问题
- Coursera DSA 算法工具箱第 4 周第 2 个问题 - 分区纪念品
- 排序算法问题(购买商店物品)(崩溃)
- C++ 分而治之的算法问题
- 我对 std::unique(算法)C++有问题
- 对于这个问题,是否有更好的数据结构和算法选择
- 迭代快速排序方法的分区算法问题
- 这种快速排序算法有什么问题?
- 不确定我的排序算法出了什么问题
- 我的算法在 1D 数组中渲染矩形有什么问题
- 虽然循环/算法问题c ++ visual studio 2012
- 反轴算法问题
- Dijkstra的算法问题[转贴]
- 神经网络与遗传算法问题
- 快速排序算法问题
- 排序算法问题-模板