C++ 字符串向量上的迭代器,作为控制台的输入获取,给出分段错误
我这里有两个不同的程序,它们都创建一个字符串的BST,然后检查BST中是否有给定的字符串 当我将字符串向量的迭代器的解引用传递给find函数时,第一个程序运行良好 但是第二个程序失败了,当我从用户那里获取一个输入,然后将迭代器的解引用传递给该输入字符串的向量时,就会出现分段错误 为什么当我从用户那里得到输入时它会失败 工作程序C++ 字符串向量上的迭代器,作为控制台的输入获取,给出分段错误,c++,templates,c++11,iterator,segmentation-fault,C++,Templates,C++11,Iterator,Segmentation Fault,我这里有两个不同的程序,它们都创建一个字符串的BST,然后检查BST中是否有给定的字符串 当我将字符串向量的迭代器的解引用传递给find函数时,第一个程序运行良好 但是第二个程序失败了,当我从用户那里获取一个输入,然后将迭代器的解引用传递给该输入字符串的向量时,就会出现分段错误 为什么当我从用户那里得到输入时它会失败 工作程序 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; int main() { 向量vn; 设定名称; BST b2; vn.推回(“AAA”); vn.
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
向量vn;
设定名称;
BST b2;
vn.推回(“AAA”);
vn.推回(“BBB”);
vn.推回(“CCC”);
向量::迭代器vit=vn.begin();
对于(;vit!=vn.end();vit++)
{
b2.插入(*vit);
姓名。插入(*vit);
}
vit=vn.begin();
对于(;vit!=vn.end();++vit)
{
如果(*(b2.查找(*vit))!=*vit)
{
cout数据
返回迭代器(currentNode);
}
}
返回端();
}
这错误地处理了find
找不到任何东西的情况。如果找不到该值,find
将迭代器返回到容器末尾的迭代器,然后应用该迭代器。哎呀
这错误地处理了
find
找不到任何东西的情况。如果找不到该值,find
将迭代器返回到容器末尾的迭代器,然后应用该迭代器。哎呀。代码中的信息不够多,但是如果find函数没有找到任何内容,则*(b2.find(*vit2))
将遵从结束迭代器,这是个坏消息。谢谢。有什么办法处理这个问题吗?另外,在第二个程序中,即使在BST中找到字符串,它也会给出一个分段错误。即使在BST中找到字符串,它也会给出一个分段错误。如果这不是家庭作业,那么只需使用集
或无序集
。我不明白。您能解释一下吗?您的代码中没有足够的信息,但是如果find函数没有找到任何内容,它看起来将遵从end迭代器,这是个坏消息。谢谢。有什么办法处理这个问题吗?另外,在第二个程序中,即使在BST中找到字符串,它也会给出一个分段错误。即使在BST中找到字符串,它也会给出一个分段错误。如果这不是家庭作业,那么只需使用集
或无序集
。我不明白。你能解释一下吗?谢谢。我该怎么处理?你能帮我处理代码吗?而且,即使在BST@temp在取消引用之前,将find
的结果与end
的结果进行比较。另外,学习如何排除分段故障。谢谢。我该怎么处理?你能帮我处理代码吗?而且,即使在BST@temp在取消引用之前,将find
的结果与end
的结果进行比较。另外,了解如何排除分段故障。
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <set>
#include<typeinfo>
using namespace std;
int main()
{
vector<std::string> vn;
set<std::string> names;
BST<std::string> b2;
vn.push_back("AAA");
vn.push_back("BBB");
vn.push_back("CCC");
vector<std::string>::iterator vit = vn.begin();
for(; vit != vn.end(); vit++)
{
b2.insert(*vit);
names.insert(*vit);
}
vit = vn.begin();
for(; vit != vn.end(); ++vit)
{
if(*(b2.find(*vit)) != *vit)
{
cout << "Incorrect return value when finding " << *vit;
return -1;
}
}
}
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <set>
#include<typeinfo>
using namespace std;
int main()
{
vector<std::string> vn;
set<std::string> names;
std::string cur_str;
BST<std::string> b2;
vn.push_back("AAA");
vn.push_back("BBB");
vn.push_back("CCC");
vector<std::string>::iterator vit = vn.begin();
for(; vit != vn.end(); vit++)
{
b2.insert(*vit);
names.insert(*vit);
}
std::getline(std::cin, cur_str);
vector<std::string> vn2;
vn2.push_back(cur_str);
vector<std::string>::iterator vit2 = vn2.begin();
vit = vn.begin();
for(; vit != vn.end(); ++vit)
{
if(*(b2.find(*vit2)) != *vit) (gives segmentation fault in this line)
{
cout << "Incorrect return value when finding " << *vit << endl;
return -1;
}
}
}
template<typename Data> (Declared at the beginning)
iterator find(const Data& item) const
{
BSTNode<Data> * currentNode = root;
while(NULL != currentNode)
{
if(item < currentNode->data)
{
currentNode = currentNode->left;
}
else if(currentNode->data < item)
{
currentNode = currentNode->right;
}
else
{
// item == currentNode->data
return iterator(currentNode);
}
}
return end();
}
if(*(b2.find(*vit2)) != *vit) (gives segmentation fault in this line)