C++矢量故障
C++ Vector troubles
这是我的程序的一个函数,它不断崩溃。该函数的目的是搜索矢量,并显示它们的排名和频率,这些频率被读取到各自的矢量中。我猜这是我的时间循环,但我不确定。矢量被正确读取。
void searchNames(vector<string> girlsname,vector<int> girlsfeq,vector<string> boysname,vector<int> boysfeq){
string name1;
string name;
int SIZE = girlsname.size();
int SIZE2 = boysname.size();
while(name1 != "quit"){
int i=0;
int frank=find(girlsname.begin(), girlsname.end(), name1) - girlsname.begin();
int mrank=find(boysname.begin(), boysname.end(), name1) - boysname.begin();
name1.clear();
name.clear();
cout << "Please enter a name: ";
cin >> name1;
cout << endl;
while(i< SIZE && name1 !=girlsname[i++]){
frank++;
}
name.clear();
i=0;
while(i< SIZE2 && name1 !=boysname[i++]){
mrank++;
}
cout << left << setw(15) << "Name" << right << setw(10) << "Girl Rank" << right << setw(10) << "Frequency" << right << setw(10) << "Boy Rank"<< right << setw(10) << "Frequency" << endl;
if(frank != SIZE && mrank != SIZE2){
cout << left << setw(15) << name1 << right << setw(10) << frank << right << setw(10) << girlsfeq[frank] << right << setw(10) << mrank << right << setw(10) << boysfeq[mrank] << endl;
}
}
首先,在任何循环中,都不会更改i
的值,因此它们可能是无限的。
其次,如果我理解你想做什么,你有一对向量,你搜索一个索引,名字在第一个向量中,然后用它从第二个向量中得到值。您可以使用std::find
函数:
int frank = find(girlsname.begin(), girlsname.end(), name1) - girlsname.begin();
现在,您可以访问girlsfreq[frank]
值。如果名称不在矢量中,则frank
等于矢量的大小,您必须检查该大小。别忘了添加include:
#include <algorithm>
我无法重现您的崩溃。相反,我能够再现一个无限循环。仔细观察while
循环,就会发现:i的值永远不会改变。如果找不到名称匹配,它将继续递增frank
的值。因此,解决这个问题的方法是:
while(i < SIZE && name1 != name) {
name = girlsname[i];
frank++;
i++;
}
但它是可以改进的:你不需要那个任务。此外,您还可以使用后缀增量的优势:
while(i < SIZE && name1 != girlsname[i++]){
frank++;
}
这样做,也就消除了name
和name1
的必要性。
相关文章:
- 分段故障(堆芯转储)矢量
- C++中的动态铸造故障
- 数组的指针从不分段故障
- vscode g++链路故障:体系结构x86_64的未定义符号
- 访问被拒绝后,c++中的故障保护代码
- Windows 10-使用gtkmm-3.0库和g++[包括再现]的分段故障
- 调试 CUDA MMU 故障
- Geeksforgeeks C 程序故障排除:IEE 754 表示法为十进制
- Arch Linux.AUR 包 mysql 不能用 makepkg 构建.错误:构建 () 中出现故障
- 正在处理故障(堆芯转储)
- 在 Boost::fiber 中引发的BOOST_ASSERT故障 Visual Studio "Debug" 构建
- 如何进行故障排除:未定义对"非虚拟 thunk to ..."的引用
- C++函数过载会导致 SEG 故障
- 分段故障 运行C++代码时出现 SIGSEGV
- 当新的故障时,是否有必要留出一些紧急内存?
- Python & C-C++ 扩展模块案例段故障
- 带升压的 SEG 故障::make_shared / 特征3 内存.h.
- 在 c++ 中,发生故障后是否需要 stream.clear()?
- 分段故障背包问题
- 分段故障 11,从类函数显示动态 C 字符串