使用容器出现vector subscript out of range等类似错误

报这个错时会弹出一个窗口,貌似内存溢出,这是什么由于vector存放的数据超出了vector的大小所造成的。

解决方法如下:

在Vector<string> vector之后,不能直接通过如:

vector[0] = "aa"

vector[1] = "bb"等进行赋值,这样会导致越界。(下标是修改不是插入,如果要用下标,需要保证初始化时候有足够的元素,一般用push_back())

首先使用 tagSeq.resize(n) 语句将vector的size调整为初始长度,然后就可以通过以上方式进行赋值了。关键是学会借助resize()函数设置容器的初始长度。

另外一种办法,那就是Vector<string> vector之后,进行调用vector的push_back("aa")方法向vector中添加数据,该方法会自动申请内存,这样vector的size就可以逐步增加,不会越界。

还有就是在使用容器的时候,很多时候都是根据判断符合某些条件才往容器中通过push_back()函数添加元素,但是可能到头来从未有过符合条件的,也就是说并没有往容器中添加任何一个元素,此时如果通过下标访问容器如v[n-1]或者通过某些函数访问容器如v.back()、v.front()等都会出现下标越界的错误(内存溢出),因为v中根本没有存放任何元素,v的长度或者说v.size()等于0,因此类似v[n-1]、v.front()等是没有意义的,所以会出现错误,这是容易忽略的地方。假如非得使用如上述下标访问或者容器的某些函数,可以先添加一个if的判断条件if (!v.empty()),即v非空的情况下上述的访问操作才是可行的。

时间: 2024-11-03 21:00:56

使用容器出现vector subscript out of range等类似错误的相关文章

stl容器区别: vector list deque set map及底层实现

在STL中基本容器有: vector.list.deque.set.map set 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问 set :集合, 用来判断某一个元素是不是在一个组里面,使用的比较少 map :映射,相当于字典 ,把一个值映射成另一个值,如果想创建字典的话使用它好了 底层采用的是树型结构,多数使用平衡二叉树实现 ,查找某一值是常数时间,遍历起来效果也不错, 只是每次插入值的时候,会重新构成底层的平衡二叉树,效率有一定影响. vector.list.dequ

STL顺序容器【vector】【deque】【list】

我们都知道,stl容器中将容器分为两类,顺序容器和关联容器. 顺序容器有三种即vector,deque,以及list 一:顺序容器的常用操作 1:首先顺序容器的迭代器 定义:T<C>::iterator iter; /*支持所有顺序容器*/ *iter返回迭代器的引用 iter->mem 对iter解引用,等效于(*iter).men ++iter|iter++自加 --iter|iter--自减 iter1==iter2  |  iter1!=iter2比较 /*只支持vector 和

eslint Cannot read property &#39;range&#39; of null错误

手动添加的配置,2个项目OK,还个项目 运行报错 Cannot read property 'range' of null TypeError: Cannot read property 'range' of null at SourceCode.getTokenBefore (/Users/jason/my-project/node_modules/eslint/lib/token-store/index.js:303:17) at checkSpacingBefore (/Users/jas

eslint Cannot read property &#39;range&#39; of null错误( Quasar Doc )$ quasar dev 出错

手动添加的配置,2个项目OK,还个项目 运行报错 Cannot read property 'range' of null TypeError: Cannot read property 'range' of null at SourceCode.getTokenBefore (/Users/jason/my-project/node_modules/eslint/lib/token-store/index.js:303:17) at checkSpacingBefore (/Users/jas

STL容器之一vector

STL中最简单也是最有用的容器之一是vector<T>类模板,称为向量容器,是序列类型容器中的一种. 容器容量可以选择性修改.(1)声明:vector<type>  v;    //容量为0构造v对象,指定元素类型为typevector<type>  v(n);    //容量为n构造v对象,指定元素类型为typevector<type>  v(n, initValue);    //容量为n构造v对象,指定元素类型为type,且所有元素被初始化为initV

C++ 容器对象vector和list 的使用

在<<c++ primer>>第四版Exercise Section 9.3.4 的Exercise 9.20 是这样的一道题目:编写程序判断一个vector<int> 容器包含的元素是否与list<int> 容器完全相同.测试代码如下: 1 #include "stdafx.h" 2 #include <iostream> 3 #include <string> 4 #include <list> 5

STL 容器(vector 和 list )

1.这个容器的知识点比较杂 1 #define _CRT_SECURE_NO_WARNINGS 2 #include <iostream> 3 #include <vector> 4 #include <list> 5 #include <algorithm> 6 #include <numeric> 7 #include <functional> 8 9 using namespace std; 10 11 /* 12 int ia

C++ 容器 LIST VECTOR erase

在Vector中 做erase操作就是按照下面的步骤来做的: copy() destory(); 在list容器中 erase操作 destory() deallocate() Vector使用从某种意义上来说内存空间只是有增无减[如果不通过某种技术的话] 而list就像正常操作一样 该释放就释放 不改释放就不释放 Vector缩容的方法: 调用swap 这是真正释放内存的方法  a.swap(b)的方法来释放a以前的内存. swap也是有动作开销的 1个拷贝构造 加上2个复制操作符 不容小觑.

STL源码剖析(4):容器(vector)

容器是很多人对STL的第一印象,vector,stack,queue,set,map等等都是容器. 这里先介绍 STL中的序列式容器. 所谓序列式容器,其中的元素可序(ordered),但未必有序(sorted).C++ 本身提供了一个序列式容器--数组(array),STL中还提供了向量(vector),链表(list),堆栈(stack),队列(queue),优先队列(priority queue)等,其中stack和queue只是将deque(双端队列)设限而得到的,技术上可以被归为一种配