std::vector<int> vec = {1, 2, 3, 4, 5}; // 使用迭代器遍历容器 for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) { std::cout << *it << ' '; } std::cout << std::endl; // 使用范围for循环遍历容器(C++11及以后) for (int num : vec) { ...
vector<int> f(e, e + 6); //初始数据为 从数组中0到5(共6个)个元素,容量也是6 1. 2. 3. 4. 5. 6. 2. 常用函数 vector<int> a; vector<int> ::iterator iter = a.begin(); //获取迭代器首地址 vector<int> ::const_iterator const_iter = a.begin(); //获取const类型迭代器 只读 ...
STL中的container各有专长,最常用的是std::vector,可以完全取代array,第二常用的是std::list。std::vector的优点在于non-sequential access超快,新增数据于数据后端超快,但insert和erase任意资料则相当缓慢;std::list则是insert和erase速度超快,但non-sequential access超慢,此范例以实际时间比较vector和list间的优缺点。
std::vector<int> nums3;// 从 nums1 复制赋值数据到 nums2nums2 = nums1;//此时nums2 = {3, 1, 4, 6, 5, 9}// 从 nums1 移动赋值数据到 nums3,// 修改 nums1 和 nums3nums3 = std::move(nums1);//此时 nums1 = {}, nums3 = {3, 1, 4, 6, 5, 9}// initializer_list 的...
1)对于顺序追加的操作,当vector预先分配的内存不够时,需要重新分配内存并复制对象,会对效率产生负面的影响;而list在每添加一个对象时都必须动态分配,每次动态分配内存都需要消耗系统CPU时间,这也是严重影响list效率的问题,所以list的运行效率反而可能比vector的还要低。而从另外一角度,list每个对象都必须有指向下一个对...
总的来说,迭代器是一个_List_node_base型的指针。每种Containers都含有一个iterator成员,实现了一系列的操作符重载,用于模拟指针操作(vector,array除外,两者的iterator都是pointer iterator)。 operator++()和operator++(int) // gcc 11 stl_list.h _Self& operator++() _GLIBCXX_NOEXCEPT { _M_node = _M_...
顺序容器由vector(向量)、list(列表)、deque(队列)组成。 vector是最常见的容器类型,访问其中的数据有很多方法,这里使用迭代器完成,一般使用iterator迭代器,它是指针的泛化,声明的对象可以用*+对象完成查看。与普通数组的不同之处在于vector是可以动态扩展的数据结构,没有长度的限制,其原理是重新开辟新空间来拷贝原来...
static std::vector<QSharedPointer<Test>> vector1; void init() { for (int i = 0; i < NUM; ++i) { auto v = QSharedPointer<Test>(new Test()); v->m_key = i; v->m_v = QString::number(i); list1.push_back(v);
这里定义了两个自定义容器,一个是 FooVector,采用 std::vector<int> 作为内部存储;另一个是 FooMap,采用 std::map<int, int> 作为内部存储。 可以看到, FooVector、 FooMap 的初始化过程,就和它们使用的内部存储结构一样。 这两个自定义容器的构造函数中, std::initializer_list 负责接收初始化列表。并通过...
iterator insert( const_iterator pos, std::initializer_list<T> ilist ); //C++11 起 具体用法示例如下:std::deque<int> c1(3, 100); //初始化一个int行的双端队列c1,此时c1 = {100, 100, 100}auto it = c1.begin();it = c1.insert(it, 200); //在it前插入元素200//c1 = {200,100...