C++ 向量与合并
对于这个向量和合并赋值,我们应该读入用户输入的字符串并按字母顺序排序。我得到了前两部分,但是当我把排序后的元素放入新向量时,它说我的新向量超出了范围。有人知道如何解决这个问题吗C++ 向量与合并,c++,vector,merge,C++,Vector,Merge,对于这个向量和合并赋值,我们应该读入用户输入的字符串并按字母顺序排序。我得到了前两部分,但是当我把排序后的元素放入新向量时,它说我的新向量超出了范围。有人知道如何解决这个问题吗 #include <iostream> #include <vector> using namespace std; int main() { vector<string> que1; vector<string> que2; vector&
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<string> que1;
vector<string> que2;
vector<string> que_merge;
string firstName;
string secondName;
int counterq1 = 0;
int counterq2 = 0;
cout << "Enter queues: " << endl;
bool check = true;
while(check) {
cin >> firstName;
if (firstName == "ENDQ"){
check = false;
}
else{
que1.push_back(firstName);
counterq1++;
check = true;
}
}
// que1.resize(counterq1);
bool check2 = true;
while (check2) {
cin >> secondName;
if (secondName == "ENDQ") {
check2 = false;
} else {
que2.push_back(secondName);
counterq2++;
}
}
// que2.resize(counterq2);
cout << "que1: " << counterq1 << endl;
for (int i = 0; i < que1.size(); i++) {
cout << que1.at(i) << endl;
}
cout << endl;
cout << "que2: " << counterq2 << endl;
for (int j = 0; j < que2.size(); j++) {
cout << que2.at(j) << endl;
}
cout << endl;
cout << "que_merge: " << counterq1 + counterq2 << endl;
int i = 0;
int k = 0;
int j = 0;
while (1){
if (i >= counterq1 || j >= counterq2){
break;
}
if(que1.at(i) < que2.at(j)){
que_merge.push_back(que1.at(i));
i++;
}
else{
que_merge.push_back(que2.at(j));
j++;
}
k++;
}
if (que1.empty()){
for (int m = j; m < counterq2; m++){
que_merge.push_back(que2.at(m));
}
} else {
for (int l = i; l < counterq1; ++l) {
que_merge.push_back(que1.at(l));
}
}
for (int l = 0; l < (counterq1+counterq2); l++) {
cout << que_merge.at(l) << endl;
}
return 0;
}
我认为您的问题在于以下几行:
if (que1.empty()){
for (int m = j; m < counterq2; m++){
que_merge.push_back(que2.at(m));
}
} else {
for (int l = i; l < counterq1; ++l) {
que_merge.push_back(que1.at(l));
}
}
您可以读取超过que_merge中元素数的内容
提示:
不要计算你自己的元素数量。改为使用像queu_merge.size这样的大小。例如:
for (int l = 0; l < que_merge.size(); l++) {
cout << que_merge.at(l) << endl;
}
或基于范围的循环,如:
for (const auto& s : que_merge) {
cout << s << endl;
}
使用std::merge和std::sort,但不一定按那个顺序
如果赋值表示你不能用C++的方式,你必须把它全部写出来,你可以用工程师的方式来做:找到一个例子来工作,并把它记录下来。
本页上有两种可能的std::merge实现:请将所有代码缩进4个空格。为什么要合并循环?为什么不把两个向量都放在新向量的末尾呢?如果你想对元素进行排序,那么一旦你合并了向量,就会出现重复。或者如果你不想重复,就会出现重复。为什么要计算向量中元素的数量?只需使用vector.sizeNo need for reference&在基于for循环的范围内。@JiveDadson Correct-不需要它,因为代码将在不使用reference的情况下产生相同的结果。但是,根据编译器和代码的优化方式,它可能会产生性能差异。在没有引用的情况下,每个元素可能都有一个副本。
for (const auto& s : que_merge) {
cout << s << endl;
}
#include <algorithm>