8.17 list 双向循环列表

// list stl 8.18.cpp : 此文件包含 “main” 函数。程序执行将在此处开始并结束。

//
//#include
//
//int main()
//{
// std::cout << “Hello World!\n”;
//}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
//#include
//using namespace std;
//#include
//#include
//class String
//{
//public:
// String(const char* str =" " )
// :_ptr(new char[strlen(str)])
// {
//使用拷贝构造
// strcpy(_ptr, str);
// }
//析构函数
// ~String()
// {
//资源的清理和空间的释放。
// if (_ptr)
// delete[] _ptr;
// _ptr = nullptr;
//
// }
//private:
// char* _ptr;
//};
//void test()
//{
// vector v;
// v.push_back(“123”);
// v.push_back(“123”);
// v.push_back(“123”);
// v.push_back(“123”);
// v.push_back(“123”);
//
//}
//int main()
//{
// test();
// return 0;
//}

#include
using namespace std;
#include
#include
//反向迭代器的正向输出
void test()
{
string s = “12345”;
//起始位置区间范围。
list lst(s.begin(),s.end());
cout << “正向迭代器” << endl;
list::iterator it = lst.begin();
while (it != lst.end())
{
cout << *it << endl;
*it = ‘a’;
++it;
}
cout << endl;
list::const_iterator cit = lst.begin();
while (cit != lst.cend())
{
cout << *it << " ";
//只读迭代器
++cit;
}
cout << endl;

list<char> lst2(s.begin(), s.end());
list<char>::reverse_iterator rit = lst.rbegin();
while (rit != lst2.rend())
{
	cout << *rit << " ";
	*rit = 'c';
	++rit;
}
cout << endl;

cout << " 反向迭代器的正向输出" << endl;
list<char>lst3(s.begin(), s.end());
list<char>::const_reverse_iterator crit = lst3.crend();
//反向迭代器向后回退
--crit;
while (crit != lst3.crbegin)
{
	//反向迭代器注意输出的顺序和方向。
	cout << *crit << " ";
	--crit;
}
//最后一个元素的输出
cout << *crit << endl;

//范围for只能掉正向输出  并且是范围确定的。
for ( auto& e : lst3)
{
	cout << e << " ";
	//赋值操作,注意赋值的书写格式。
	e = 'c';
}
cout << endl;
for (const auto& e : lst3)
{
	//const 不能对lst3中的字符进行修改。
	cout << e << " ";
}
cout << endl;

}
int main()
{
test();
return 0;
}

//#include
//using namespace std;
//#include
//#include
//template
//void printList(const list& lst)
//{
// for (const auto& e : lst)
// cout << e << " ";
// cout << endl;
//
//}
//void test()
//{
// list lst;
// lst.push_front(1);
// lst.push_back(2);
// lst.insert(lst.begin(), 0);
// lst.insert(lst.end(), 3);
// //内置类型体现不是太明显 这里是插入的操作,就是之前的insert插入,就是你得首先有对象,才能进行操作,
//但是现在就是可以没有,人家会自己创建,并且是可以完成插入的操作。
// lst.emplace(lst.begin(), -1);
// lst.emplace_back(4);
// lst.emplace_front(-2);
//
这里是拷贝构造的操作。
// list copy = lst;
// list.insert(lst.end(), copy.begin(), copy.end());
// for (const auto& e : lst)
// {
// cout << e << " ";
// }
// cout << endl;
// //插入不会导致迭代器失效。
// cout << *it << endl;
//
// //删除对迭代器有失效 解决办法就是重新获取
// //erase返回值;迭代器->被删除元素的下一个位置
// it = lst.erase(it);
// cout << *it << endl;
//
// //交换 就是交换list中的内容
//
//
//这里是增容的操作。
// //resize
// //lst.clear();
// //cout<<lst.size()<<endl;
// lst.resize(5, 100);
// for (const auto& e : lst)
// {
// cout << e << " ";
//
// }
// cout << endl;
//
// lst.resize(7, 200);
// for (const auto& e : lst)
// {
// cout << e << " ";
//
// }
// cout << endl;
//
//
//
//
//}

拼接
//#include
//using namespace std;
//#include
//#include
//template
//void printList(const list& lst)
//{
// for (const auto& e : lst)
// cout << e << " ";
// cout << endl;
//
//}
//void test()
//{
// string s = “123”;
// string s2 = “abc”;
// list lst(s.begin(), s.end());
// list lst2(s.begin(), s.end());
// //lst splice(lst.begin(),lst2,++lst2.begin());
// lst.splice(lst.begin(), lst2, ++lst2.begin(), lst2.end());
// printList(lst);
// printList(lst2);
//entire list(1)
//void splice(iterator position, list& x);
//指针位置
//single element(2)
//void splice(iterator position, list& x, iterator i);
//element range(3)
//void splice(iterator position, list& x, iterator first, iterator last);
// //删除
要删除可能存在,也可能不存在
// lst.remove(‘f’);
// printList(lst2);
//
// lst.push_back(‘1’);
// lst.push_back(‘2’);
// lst.push_back(‘3’);
// lst.push_back(‘4’);
// lst.push_back(‘5’);
//
// //去重操作
// //前提是数据有序,为了是提高效率。
// //uniqe
// lst.unique();
// printList(lst);
// lst.sort();//默认是由小到大
// lst.unique();
// printList(lst);
//
//}
//int main()
//{
// test();
// return 0;
//}

//#include
//#include
//#include<stdio.h>
//using namespace std;
//#include
list实现
//template
创建节点的封装创建
//struct ListNode
//{
// T _data;
// ListNode* _next;
// ListNode* _prev;
//
// ListNode(const T& val = T())
// :_data(val)
// , _next(nullptr)
// , _prev(nullptr)
// {}
//};
//template
//class List
//{
//public:
// //类型名的简化。
// typedef ListNode Node;
// typedef Node* pNode;
//
// List()
// :_header(new Node())
// {
// //循环结构
// _header->_next = _header->_prev = _header;
// }
// List(size_t n, const T& val = T())
// :_header(new Node())
// {
// _header->_next = _header->_prev = _header;
// for (size_t i = 0; i < n; ++i)
// {
// pushBack(val);
// }
//
// }
// template
// //左闭右开
// List(inputIterator first, inputIterator last)
// :_header(new Node())
// {
// //这里是空的只有头结点的循环链表。
// //循环结构创建
// _header->_next = _header->_prev = _header;
// while (first != last)
// {
//注意的是插入的是解引用之后的真是的东西。否则是插入的是指针。
// pushBack(first);
// }
// }
// pushBack(const T& val)
// {
// Node
prev = _header->_prev;
// Node* newNode = new Node(val);
//
// prev->_next = newNode;
// newNode->_prev = prev;
//
// newNode->_next = _header;
// _header->_prev = newNode;
//
// }
// ~List()
// {
// if (_header)
// {
// Node* node = _header->_next;
// while (node!=_header)
// {
// Node* next = node->_next;
// delete node;
// node = next;
// }
// delete _header;
// _header = nullptr;
// }
// }
//private:
// ListNode* _header;
//};
//
//void test()
//{
// List lst;
// lst.pushBack(1);
// lst.pushBack(2);
// lst.pushBack(3);
// lst.pushBack(4);
//
// List lst2((size_t)10, 5);
//
// string str = “1234567890”;
// List lst3(str.begin(), str.end());
//
// int main()
// {
// test();
// return 0;
// }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值