stl使用注意事项
来源:互联网 发布:南师大艺考成绩算法 编辑:程序博客网 时间:2024/05/01 20:28
1.怎样获取STL list中的指定元素 貌似没有list.get(i)啊?
转载自:http://topic.csdn.net/u/20110324/10/14543271-4c23-4a18-999d-64be00c2070e.html
sortlist.get(3) 这个不是vector 不对的
难道只有用iter遍历吗
谢谢大家
回复:
1.恩,是的。计数遍历吧
3.list<int>::iterator iter = sortlist.begin();
advance(iter, n - 1);
效率和1楼是一样的是O(n),这是链表这种数据结构本身的特性啊
4.list容器只能遍历了,如果是vector可以直接取【2】
5.如果能get(i)..那vector以后怎么混..
6.LIST是链表结构,VECTOR才类似数组,前者优势是插入删除,想在O(1)时间内定位,还是用VECTOR吧
7.list 只有front和back。中间的元素 只能是遍历了
8.只能是遍历,不过你可以用advanced函数把循环隐藏在内部,你看起来也许就不会那么不爽了。
9.list底层是链表实现的,不能直接get,只能遍历。vector是数组,所以可以用下标直接访问。
10.用遍历吧,这个估计没有别的好办法吧
11.恕我孤陋,vector有get(i)吗?不是at(i)?
12.list只能用遍历了,因为它是用指针的,查找只能用遍历
2.关于stl vector插入元素的问题
转载自:http://topic.csdn.net/u/20110324/10/14543271-4c23-4a18-999d-64be00c2070e.html
stl中的vector,可以提供随机迭代器方便的取,但是存好像并不方便啊
比如共有元素10个,我要在3号位置插入一个元素,插入完成后变成11个.
可以用的vector成员函数有, insert
但是insert需要传的参数是iterator,并不是直接的一个索引
需要这样用
insert( iterator pos , XXXelement )
不能这样用
insert( uint nIndex , XXXelement )
那岂不是我要在3号位置插入元素,还需要用索引循环一遍,先找到在3号位置的Iterator,然后才能插入
回复:
1.额,如果插入频繁那么请用list
2.vector主要用于相对稳定的数据。
楼主参考一下这个吧:http://www.cplusplus.com/reference/stl/
很经典,也很全面,还有示例代码。
3.没有一个容器说插入和随机访问都很好的。这个本来就是一对矛盾。
4.嗯,vector中删除数据的效率相对其他容器要更弱一些。
5.各位大大,我是想问vector有没有成员函数,可以方便的直接在索引位置插入元素,而不是先要找到iterator才能插入
6.额 vector的迭代器 可以直接用算术运算,你想在哪个位置插入。直接用begin()返回的迭代器加上位移量就是了。
7.vector<int>::iterator pos = vec.begin()+3; 迭代器支持算术操作的,不用for循环那么麻烦的。
8.vector<int>::iterator pos = vec.begin() + x;
你对迭代器了解不透彻,多看看C++primer 这些都是简单问题,书中讲的很清楚~
9.vector不是你用迭代器+几就会到几的,内存会越界访问的,只有push_back或者insert才能动态扩展内存.
我建议你初始化vector(length);直接固定vector大小,或者使用数组.
3.STL sort 函数对结构体的排序
转载自:http://www.cnblogs.com/kdy71107216/archive/2009/03/04/1403382.html
C语言函数中,可以用qsort 来进行 结构体数组的排序,但是如果上升到C++中,对vector<NODE>的排序 qsort 就无能为力了。。。
不过C++ <algorithm> 函数库中的sort函数可以对 结构体vector进行排序。 前提是 要对 node 进行改造
例如 一个含有四项key 值的node 如下
则调用sort 如下 sort(V.begin(),V.end());
4.如何在STL中存储结构体指针,及释放
转载自:http://4develop.in/page/Cpp/20110811_11_30d22ff0-3a95-46fe-9de3-28a0e623a931/如何在STL中存储结构体指针及释放.html
1.修改后,代码如下:
2.LZ把分给我吧
转载自:http://topic.csdn.net/u/20110324/10/14543271-4c23-4a18-999d-64be00c2070e.html
list<int> sortlist;sortlist.push_back(3);sortlist.push_back(15);sortlist.push_back(8);sortlist.push_back(7);sortlist.sort();排序过后我怎么获取第三个元素呢 ??
sortlist.get(3) 这个不是vector 不对的
难道只有用iter遍历吗
谢谢大家
回复:
1.恩,是的。计数遍历吧
list<int> sortlist;sortlist.push_back(3);sortlist.push_back(15);sortlist.push_back(8);sortlist.push_back(7);sortlist.sort();list<int>::iterator iter = sortlist.begin();for (int i=0; i<2; i++) { iter++;}cout << (*iter) << endl; //82.用遍历 自然没有问题 但是效率较低,看看有没有别的函数 也许不叫get 叫find之类的
3.list<int>::iterator iter = sortlist.begin();
advance(iter, n - 1);
效率和1楼是一样的是O(n),这是链表这种数据结构本身的特性啊
4.list容器只能遍历了,如果是vector可以直接取【2】
5.如果能get(i)..那vector以后怎么混..
6.LIST是链表结构,VECTOR才类似数组,前者优势是插入删除,想在O(1)时间内定位,还是用VECTOR吧
7.list 只有front和back。中间的元素 只能是遍历了
8.只能是遍历,不过你可以用advanced函数把循环隐藏在内部,你看起来也许就不会那么不爽了。
9.list底层是链表实现的,不能直接get,只能遍历。vector是数组,所以可以用下标直接访问。
10.用遍历吧,这个估计没有别的好办法吧
11.恕我孤陋,vector有get(i)吗?不是at(i)?
12.list只能用遍历了,因为它是用指针的,查找只能用遍历
2.关于stl vector插入元素的问题
转载自:http://topic.csdn.net/u/20110324/10/14543271-4c23-4a18-999d-64be00c2070e.html
stl中的vector,可以提供随机迭代器方便的取,但是存好像并不方便啊
比如共有元素10个,我要在3号位置插入一个元素,插入完成后变成11个.
可以用的vector成员函数有, insert
但是insert需要传的参数是iterator,并不是直接的一个索引
需要这样用
insert( iterator pos , XXXelement )
不能这样用
insert( uint nIndex , XXXelement )
那岂不是我要在3号位置插入元素,还需要用索引循环一遍,先找到在3号位置的Iterator,然后才能插入
int nMaxNum = (int)m_buffer.size();int nCurrentIndex = 0;for (vector<int>::iterator pos = m_buffer.begain(); pos != m_buffer.end(); ++pos) { //此处的nIndex即为要插入元素的位置,3号位置 if(nCurrentIndex == nIndex) { m_buffer.insert( pos , xxxxx ) }}这样也太麻烦了吧,为何不提供个直接针对索引的insert呢, <<C++标准库>>和等等网站上都没有查到
回复:
1.额,如果插入频繁那么请用list
2.vector主要用于相对稳定的数据。
楼主参考一下这个吧:http://www.cplusplus.com/reference/stl/
很经典,也很全面,还有示例代码。
3.没有一个容器说插入和随机访问都很好的。这个本来就是一对矛盾。
4.嗯,vector中删除数据的效率相对其他容器要更弱一些。
5.各位大大,我是想问vector有没有成员函数,可以方便的直接在索引位置插入元素,而不是先要找到iterator才能插入
6.额 vector的迭代器 可以直接用算术运算,你想在哪个位置插入。直接用begin()返回的迭代器加上位移量就是了。
7.vector<int>::iterator pos = vec.begin()+3; 迭代器支持算术操作的,不用for循环那么麻烦的。
8.vector<int>::iterator pos = vec.begin() + x;
你对迭代器了解不透彻,多看看C++primer 这些都是简单问题,书中讲的很清楚~
9.vector不是你用迭代器+几就会到几的,内存会越界访问的,只有push_back或者insert才能动态扩展内存.
我建议你初始化vector(length);直接固定vector大小,或者使用数组.
3.STL sort 函数对结构体的排序
转载自:http://www.cnblogs.com/kdy71107216/archive/2009/03/04/1403382.html
C语言函数中,可以用qsort 来进行 结构体数组的排序,但是如果上升到C++中,对vector<NODE>的排序 qsort 就无能为力了。。。
不过C++ <algorithm> 函数库中的sort函数可以对 结构体vector进行排序。 前提是 要对 node 进行改造
例如 一个含有四项key 值的node 如下
struct node { string name; int medal[3];};要对其以medal数组 降序排序,若 medal 数组完全相等,则以 name 的字典序排序要调用 sort 函数对 node 进行排序,则 将node 改写为struct node { string name; int medal[3]; bool operator <(const node& other) const { if(medal[0] > other.medal[0]) return true; if(medal[0] < other.medal[0]) return false; if(medal[1] > other.medal[1]) return true; if(medal[1] < other.medal[1]) return false; if(medal[2] > other.medal[2]) return true; if(medal[2] < other.medal[2]) return false; if(name < other.name) return true; return false; }};例如在全局声明了一个vector<node> V;
则调用sort 如下 sort(V.begin(),V.end());
4.如何在STL中存储结构体指针,及释放
转载自:http://4develop.in/page/Cpp/20110811_11_30d22ff0-3a95-46fe-9de3-28a0e623a931/如何在STL中存储结构体指针及释放.html
1.修改后,代码如下:
#include <iostream>#include <list>#include <numeric>#include <algorithm>#include <cstdlib>using namespace std;typedef struct STR_TYPE{ char name[32]; int num; double price;}STR_ALL, *PSTR_ALL;typedef list<PSTR_ALL> LISTSTRUCT;int main(void){ STR_ALL *stu_type = new STR_ALL; memset( stu_type, 0, sizeof(STR_ALL) ); //声明i为迭代器 LISTSTRUCT::iterator iii; LISTSTRUCT listStu; stu_type->num = 1; listStu.push_back (stu_type); cout<<"listOne.begin()--- listOne.end():"<<endl; //for (iii = listp.begin(); listp.empty(); iii++) iii = listStu.begin(); PSTR_ALL stu; stu = *iii; printf( "%d\n", stu->num ); getchar(); getchar(); cout << endl; /* //使用STL的accumulate(累加)算法 int result = accumulate(listOne.begin(), listOne.end(),0); cout<<"Sum="<<result<<endl; cout<<"------------------"<<endl;*/}主要是概念得认清,因为list中存放的是STR_ALL的指针类型,即PSTR_ALL。而使用iterator时,iterator相当于一个指针,指向list中的成员。因此,我们可以断定iterator是指向PSTR_ALL的指针,即STR_ALL的二级指针,所以,stu = *iii;在iii之前,必须使用*获得一级指针。
2.LZ把分给我吧
#include <iostream>#include <list>#include <numeric>#include <algorithm>#include <stdlib.h>using namespace std;struct STR_TYPE { char name[32]; int num; double price;};list<STR_TYPE*> L;void Insert(const char* name, int num, double price) { STR_TYPE* pElement = new STR_TYPE; strcpy(pElement->name, name); pElement->num = num; pElement->price = price; L.push_back(pElement);}void Del(STR_TYPE*& pElement) { if(pElement) { delete pElement; pElement = 0; }}void Print(const STR_TYPE* pElement) { cout << pElement->name << "\t" << pElement->num << "\t" << pElement->price << endl;}double Add(double r, const STR_TYPE* pA) { return r + pA->price;}int main(void) { Insert("a", 1, 1.2); Insert("b", 2, 2.4); Insert("c", 3, 3.6); for_each(L.begin(), L.end(), Print); double r = 0.0; r = accumulate(L.begin(), L.end(), r, Add); cout << "Result: " << r << endl; for_each(L.begin(), L.end(), Del); L.clear(); for_each(L.begin(), L.end(), Print); return 0;}
- stl使用注意事项
- STL MAP使用注意事项
- STL的使用与注意事项
- C++ STL使用,以及注意事项
- STL之迭代器的使用注意事项
- STL中priority_queue的使用注意事项
- c++类的STL使用注意事项
- STL 注意事项
- 在Linux中使用STL迭代器的一点注意事项
- 关于stl标准容器中的迭代器的使用注意事项
- stl std::map容器排序及使用注意事项
- 安卓NDK编程使用STL库及注意事项
- 使用 STL vector中的注意事项以及重写vector时的注意事项
- Stl 删除元素注意事项
- STL 顺序容器注意事项
- Stl 删除元素注意事项
- STL--set注意事项
- STL find 注意事项
- 先理清逻辑问题,再解决语法问题
- 我的游戏之路(5)
- C#学习日志(5)
- 篮球新时尚音乐配音“嘻哈甜心”
- ASP.NET程序中常用的三十三种代码
- stl使用注意事项
- Py_SetPath导致的BUG一例(issue11320)
- XP下恢复“显示桌面”按钮
- 我的游戏之路(6)
- 两种与const相关的指针类型
- 利用Ant自动更新构建提交
- ANSI C的三个类型限定词:const,volatile,restrict
- 第13章_了解MVC3中Filters(第一篇)过滤器
- IOS开源项目