列表中的 erase() 在 MacOS 上的 c++ 中不起作用。什么是 bash: line 1: 88225 Segmentation fault: 11?
erase() in list does not work in c++ on MacOS. What is bash: line 1: 88225 Segmentation fault: 11?
#include <iostream>
#include <list>
using namespace std;
int main () {
list<int> mylist;
list<int>::iterator it;
for(int i=1;i<6;i++){
mylist.push_back(i);
}
for (it=mylist.begin(); it!=mylist.end(); ++it)
cout << ' ' << *it;
cout<<endl;
for(it=mylist.begin(); it!=mylist.end();it++){
if((*it)==2){
mylist.erase(it);
mylist.insert(it,9);
break;
}
}
for (it=mylist.begin(); it!=mylist.end(); ++it)
cout << ' ' << *it;
cout<<endl;
return 0;
}
似乎 mylist.erase(it) 不工作,因为当我删除它时,程序可以工作。
以上程序的输出是
1 2 3 4 5
bash: line 1: 88370 Segmentation fault: 11 "/Users/alimtleuliyev/Desktop/quiadratic"
[Finished in 441ms with exit code 139]
你需要写
if((*it)==2){
it = mylist.erase(it);
mylist.insert(it,9);
break;
}
要输出列表,最好使用基于范围的 for 循环。
另外,要在列表中查找具有给定值的元素,最好使用标准算法 std::find
而不是使用 for 循环。
这是一个演示程序。
#include <iostream>
#include <list>
#include <iterator>
#include <algorithm>
int main()
{
std::list<int> mylist;
for ( int i = 1; i < 6; i++ )
{
mylist.push_back( i );
}
for (const auto &item : mylist)
{
std::cout << item << ' ';
}
std::cout << std::endl;
auto it = std::find( std::begin( mylist ), std::end( mylist ), 2 );
if ( it != std::end( mylist) )
{
it = mylist.erase( it );
mylist.insert( it, 9 );
}
for (const auto &item : mylist)
{
std::cout << item << ' ';
}
std::cout << std::endl;
return 0;
}
程序输出为
1 2 3 4 5
1 9 3 4 5
注意这一点,而不是调用成员函数 erase
和 insert
你可以只写
if ( it != std::end( mylist) ) *it = 9;
#include <iostream>
#include <list>
using namespace std;
int main () {
list<int> mylist;
list<int>::iterator it;
for(int i=1;i<6;i++){
mylist.push_back(i);
}
for (it=mylist.begin(); it!=mylist.end(); ++it)
cout << ' ' << *it;
cout<<endl;
for(it=mylist.begin(); it!=mylist.end();it++){
if((*it)==2){
mylist.erase(it);
mylist.insert(it,9);
break;
}
}
for (it=mylist.begin(); it!=mylist.end(); ++it)
cout << ' ' << *it;
cout<<endl;
return 0;
}
似乎 mylist.erase(it) 不工作,因为当我删除它时,程序可以工作。
以上程序的输出是
1 2 3 4 5 bash: line 1: 88370 Segmentation fault: 11 "/Users/alimtleuliyev/Desktop/quiadratic" [Finished in 441ms with exit code 139]
你需要写
if((*it)==2){
it = mylist.erase(it);
mylist.insert(it,9);
break;
}
要输出列表,最好使用基于范围的 for 循环。
另外,要在列表中查找具有给定值的元素,最好使用标准算法 std::find
而不是使用 for 循环。
这是一个演示程序。
#include <iostream>
#include <list>
#include <iterator>
#include <algorithm>
int main()
{
std::list<int> mylist;
for ( int i = 1; i < 6; i++ )
{
mylist.push_back( i );
}
for (const auto &item : mylist)
{
std::cout << item << ' ';
}
std::cout << std::endl;
auto it = std::find( std::begin( mylist ), std::end( mylist ), 2 );
if ( it != std::end( mylist) )
{
it = mylist.erase( it );
mylist.insert( it, 9 );
}
for (const auto &item : mylist)
{
std::cout << item << ' ';
}
std::cout << std::endl;
return 0;
}
程序输出为
1 2 3 4 5
1 9 3 4 5
注意这一点,而不是调用成员函数 erase
和 insert
你可以只写
if ( it != std::end( mylist) ) *it = 9;