STL中的list和vector使用(一)更正
2017-06-02 14:05
190 查看
喜欢的朋友可以关注收藏一下: http://blog.csdn.NET/qq_31201973
本文如有错误,请及时私信我。
原版要求:
创建一个list容器,放置6个整型数值[0, 1, 30, 20, 10, 0]
1. 从后向前打印出容器内的元素
2. 向list容器后面添加两个元素,并对容器内的值求和并打印
3. 打印链表的中间元素
4. 找到不为0的元素,复制到一个vector中并打印vector元素
第3问出现了些小问题我做一下更正 cout << "3. 打印链表的中间元素" << endl;
i = (L.size()) / 2; //中间元素这里默认是中间靠前的一个,这样无论容器元素是偶数还是奇数都适用;
for (plist = L.begin();; ++plist) //有点类似于快指针,虽然少循环了一半的次数,但不是严格意义上的快指针,严格意义快指针是fast=fast->next->next; ,速度稍微快一点。
{
--i;
if (i == 0)
{
cout << "中间元素为:" << *plist << endl << endl; //打印的是第四个元素L{0,1,30,20,10,0,输入元素1,输入元素2} ,如果总元素是8个,那应该打印第4个,20 !!!
break; //防止再进入接下来的循环
}
}这个问题其实是快指针第一步就跳到了单数元素三的原因,所以索性我就不用快指针
我还对上文中的代码进一步做了优化,效率得到了提供,完整代码如下:
// main.cpp
#include<iostream>
#include<list>
#include<vector>
using namespace std;
typedef list<int> INTLIST;
int main()
{
INTLIST L{0,1,30,20,10,0};
INTLIST::iterator plist;
int sum = 0, i;
long long int a;
vector<int> V;
vector<int>::iterator pvector = V.begin();
cout << "1. 从后向前打印出容器内的元素." << endl;
for (plist = --(L.end());; --plist) //for无限定条件时不判断
{
cout << *plist << " ";
if (plist == L.begin()) //在此处判断并不影响效率
{
break;
}
}
cout << endl << endl << "2. 向list容器后面添加两个元素,并对容器内的值求和并打印." << endl;
cout << "请任意输入两个int类型数字:";
for (i = 0; i < 2; ++i)
{
cin >> a;
while (a < -2147483647 || a > 2147483647) //int范围边界的判断,经测试实际范围应该是-2147483648~2147483647。
{//但是加判断里加负号以后会显示错误 1 error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型。
//这一问题是由于编译器SDL安全检查认为这一操作(通常是为无符号整形取负的操作)无效而产生的.
//当编译器看到2147483648时会自动认为超过了2147483647,直接转换成unsigned int.当编译器看到负号的时候直接取反是它本身,编译器存不了那么大的数,详细看一元运算符。
cout << "整数(int)范围非法,请重新输入整数(int -2147483648~2147483647):";
cin >> a;
}
L.push_back(a);
}
for (auto& plist : L)
{
sum+=plist;
}
cout << "list容器内" << L.size() << "个元素的和为:" << sum << endl << endl;
cout << "3. 打印链表的中间元素" << endl;
//if ((L.size()) % 2 == 0) //如果是偶数用速度会少循环一般次数
//{
i = (L.size()) / 2; //中间元素这里默认是中间靠前的一个,这样无论容器元素是偶数还是奇数都适用;
for (plist = L.begin();; ++plist) //有点类似于快指针,虽然少循环了一半的次数,但不是严格意义上的快指针,严格意义快指针是fast=fast->next->next; ,速度稍微快一点。
{
--i;
if (i == 0)
{
cout << "中间元素为:" << *plist << endl << endl; //打印的是第四个元素L{0,1,30,20,10,0,输入元素1,输入元素2} ,如果总元素是8个,那应该打印第4个,20 !!!
break; //防止再进入接下来的循环
}
}
//}
//else
//{
// i = (L.size()) / 2; //中间元素这里默认是中间靠前的一个,这样无论容器元素是偶数还是奇数都适用;
// for (plist = L.begin();; ++plist)
// {
// --i;
// if (i == 0)
// {
// cout << "中间元素为:" << *plist << endl << endl; //打印的是第四个元素L{0,1,30,20,10,0,输入元素1,输入元素2} ,如果总元素是8个,那应该打印第4个,20 !!!
// break; //防止再进入接下来的循环
// }
// }
//}
cout << "4. 找到不为0的元素,复制到一个vector中并打印vector元素" << endl;
for (auto plist: L)
{
if (plist != 0)
{
V.push_back(plist);
}
}
cout << "不为0的元素已经插入到vector中,共" << V.size() << "个元素." << endl;
cout << "vector中的元素为:";
for (auto pvector : V)
{
cout << pvector << " ";
}
cout << endl << endl;
cout << "经测试程序结果符合要求." << endl << endl;
system("pause");
return 0;
}运行截图
本文如有错误,请及时私信我。
原版要求:
创建一个list容器,放置6个整型数值[0, 1, 30, 20, 10, 0]
1. 从后向前打印出容器内的元素
2. 向list容器后面添加两个元素,并对容器内的值求和并打印
3. 打印链表的中间元素
4. 找到不为0的元素,复制到一个vector中并打印vector元素
第3问出现了些小问题我做一下更正 cout << "3. 打印链表的中间元素" << endl;
i = (L.size()) / 2; //中间元素这里默认是中间靠前的一个,这样无论容器元素是偶数还是奇数都适用;
for (plist = L.begin();; ++plist) //有点类似于快指针,虽然少循环了一半的次数,但不是严格意义上的快指针,严格意义快指针是fast=fast->next->next; ,速度稍微快一点。
{
--i;
if (i == 0)
{
cout << "中间元素为:" << *plist << endl << endl; //打印的是第四个元素L{0,1,30,20,10,0,输入元素1,输入元素2} ,如果总元素是8个,那应该打印第4个,20 !!!
break; //防止再进入接下来的循环
}
}这个问题其实是快指针第一步就跳到了单数元素三的原因,所以索性我就不用快指针
我还对上文中的代码进一步做了优化,效率得到了提供,完整代码如下:
// main.cpp
#include<iostream>
#include<list>
#include<vector>
using namespace std;
typedef list<int> INTLIST;
int main()
{
INTLIST L{0,1,30,20,10,0};
INTLIST::iterator plist;
int sum = 0, i;
long long int a;
vector<int> V;
vector<int>::iterator pvector = V.begin();
cout << "1. 从后向前打印出容器内的元素." << endl;
for (plist = --(L.end());; --plist) //for无限定条件时不判断
{
cout << *plist << " ";
if (plist == L.begin()) //在此处判断并不影响效率
{
break;
}
}
cout << endl << endl << "2. 向list容器后面添加两个元素,并对容器内的值求和并打印." << endl;
cout << "请任意输入两个int类型数字:";
for (i = 0; i < 2; ++i)
{
cin >> a;
while (a < -2147483647 || a > 2147483647) //int范围边界的判断,经测试实际范围应该是-2147483648~2147483647。
{//但是加判断里加负号以后会显示错误 1 error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型。
//这一问题是由于编译器SDL安全检查认为这一操作(通常是为无符号整形取负的操作)无效而产生的.
//当编译器看到2147483648时会自动认为超过了2147483647,直接转换成unsigned int.当编译器看到负号的时候直接取反是它本身,编译器存不了那么大的数,详细看一元运算符。
cout << "整数(int)范围非法,请重新输入整数(int -2147483648~2147483647):";
cin >> a;
}
L.push_back(a);
}
for (auto& plist : L)
{
sum+=plist;
}
cout << "list容器内" << L.size() << "个元素的和为:" << sum << endl << endl;
cout << "3. 打印链表的中间元素" << endl;
//if ((L.size()) % 2 == 0) //如果是偶数用速度会少循环一般次数
//{
i = (L.size()) / 2; //中间元素这里默认是中间靠前的一个,这样无论容器元素是偶数还是奇数都适用;
for (plist = L.begin();; ++plist) //有点类似于快指针,虽然少循环了一半的次数,但不是严格意义上的快指针,严格意义快指针是fast=fast->next->next; ,速度稍微快一点。
{
--i;
if (i == 0)
{
cout << "中间元素为:" << *plist << endl << endl; //打印的是第四个元素L{0,1,30,20,10,0,输入元素1,输入元素2} ,如果总元素是8个,那应该打印第4个,20 !!!
break; //防止再进入接下来的循环
}
}
//}
//else
//{
// i = (L.size()) / 2; //中间元素这里默认是中间靠前的一个,这样无论容器元素是偶数还是奇数都适用;
// for (plist = L.begin();; ++plist)
// {
// --i;
// if (i == 0)
// {
// cout << "中间元素为:" << *plist << endl << endl; //打印的是第四个元素L{0,1,30,20,10,0,输入元素1,输入元素2} ,如果总元素是8个,那应该打印第4个,20 !!!
// break; //防止再进入接下来的循环
// }
// }
//}
cout << "4. 找到不为0的元素,复制到一个vector中并打印vector元素" << endl;
for (auto plist: L)
{
if (plist != 0)
{
V.push_back(plist);
}
}
cout << "不为0的元素已经插入到vector中,共" << V.size() << "个元素." << endl;
cout << "vector中的元素为:";
for (auto pvector : V)
{
cout << pvector << " ";
}
cout << endl << endl;
cout << "经测试程序结果符合要求." << endl << endl;
system("pause");
return 0;
}运行截图
相关文章推荐
- stl中vector,list,deque的使用准则
- STL 标准模板库 vector queue list map multimap的使用基础
- STL中list,vector,deque,map,set区别、联系和使用场景
- C++ STL基本容器的使用(vector、list、deque、map、stack、queue)
- 标准模板库使用举例(STL - (LIST,VECTOR))
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- C++ STL容器的学习使用(vector、queue、list、set、map)
- STL容器 list、vector、map、set 使用的陷阱
- STL中的容器使用比较(string vector list deque set map)
- C++ STL容器的使用方法(vector、queue、list、set、map)
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- C/C++--STL中list,vector,deque,map,set区别、联系和使用场景
- STL中list,vector,deque,map,set区别、联系和使用场景原理
- stl vector list的使用
- stl 中list 或者vector正确使用find查找类对象
- STL中list,vector,deque,map,set区别、联系和使用场景
- stl中vector,list,deque的使用准则
- 【经验】STL的list vector在iterator迭代器的循环中 使用erase 造成的BUG
- STL中vector和list的使用
- C/C++--STL中list,vector,deque,map,set区别、联系和使用场景