1下标访问: vec[1];//并不会检查是否越界2at方法访问: vec.at(1);//以上两者的区别就是at会检查是否越界,是则抛出out of range异常3访问第一个元素: vec.front();4访问最后一个元素: vec.back();5返回一个指针:int* p = vec.data();//可行的原因在于vector在内存中就是一个连续存储的数组,所以可...
一般来说,vector<T>的[]下标操作都会返回T&。但是vector<bool>是个例外。vector<bool>的[]下标操作...
1.需要#include <vector> 2.使用std声明std::vector 3.使用vector<Type> vec() 声明vector的容量大小(声明3个单位的容量,vec(3),执行vec[4] = 3,报错,越界错误) 创建vector对象,vector<int> vec; 4.尾部插入数字:vec.push_back(a); 5.使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。
检测vector是否为空:可以使用empty()函数来检测vector是否为空。如果vector为空,该函数返回true;否则返回false。 访问vector中的元素:可以使用下标运算符[]或at()函数来访问vector中的元素。下标运算符[]可以通过索引直接访问元素,而at()函数可以通过索引访问元素,并提供了边界检查。
可以直接通过下标运算符[]或at()函数修改指定位置的元素值。5. 删除vector中的元素:pop_back()函数:删除vector末尾的元素。erase()函数:删除指定位置的元素或删除一个范围内的元素。6. 获取vector的长度和容量:size()函数:返回vector中的元素个数。capacity()函数:返回vector当前容量的大小。7. 清空vector:c...
此时此刻it指向元素4,并且it类型是std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>,值也是4。 我们继续单步调试至line255: 图2 发生crash,不死心点下重试: 图3 可以大致推测出,再次访问到it时,报错"vector iterators incompatible",这说明经过erase(it)之后,it已经失效,不再是一个合法ite...
由于MSDN 中关于 ::std::vector 的内容较少,我们在这里做一些介绍,供参考。 不熟悉 CArray<>/WIN32 也没关系,这里提到它们的地方并不太多。 1. CArray<> VS ::std::vector<> ? CArray<> 和 ::std::vector<> 一样,都是模板类,用于管理任意类型的对象的动态数组。都在解构时释放所管理的动态内存。
4.1 std::vector::begin 返回指向容器中第一个元素的迭代器。 返回指向向量中第一个元素的迭代器。 注意,与member vector::front不同,member vector::front返回对第一个元素的引用,该函数返回指向该元素的随机访问迭代器。 如果容器为空,则返回的迭代器值不应被取消引用。
v1.at(n) // 与上面类似,返回下标为n的元素的引用,不同的是,如果下标不存在,它会抛出out_of_range的异常。它是安全的,建议使用它。 v1.front() // 返回vector中头部的元素的引用(使用时,一定要进行非空判断) v1.back() // 返回vector中尾部的元素 引用(使用时,一定要进行非空判断) ...
当使用数组下标访问元素时,务必确保相应位置已初始化,避免未定义行为。初始化是为元素分配内存空间的关键步骤。在C++11及以上版本中,推荐使用emplace_back()替换push_back(),以提高效率。emplace_back仅调用构造函数,而push_back会额外调用构造函数或移动构造函数/拷贝构造函数。在vector中,erase(const_...