下标[]赋值会显示SIGSEGV段错误,越界错误. at赋值会显示 terminate called after throwing an instance of ‘std::out_of_range’ c++标准不要求vector::operator[]进行下标越界检查,原因是为了效率,总是强制下标越界检查会增加程序的性能开销。 所以通常使用vector两种方法: (1)知道vector的大小,初始化时就设立大小....
从以上代码以及注释可以看出,[]下标运算符不会做越界访问保护,而且不会抛出异常,所以使用[]访问元素时,需要自己做越界检查,否则可能会导致未定义的行为。 at() /* This function provides for safer data access. The parameter- is first checked that it is in the range of the vector. The- function throw...
operator[ ]和at的效果是一样的,两者区别在于检查机制: operator[ ]:当发生越界访问时,会直接assert报错; at:当发生越界访问时,会直接抛异常 2. 元素访问——迭代器 void test_vector2(){vector<int> v1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);//方式2 --- 迭代...
下标访问: vec[1]; //并不会检查是否越界 at方法访问: vec.at(1); //以上两者的区别就是at会检查是否越界,是则抛出out of range异常 访问第一个元素: vec.front(); 访问最后一个元素: vec.back(); 返回一个指针: int* p = vec.data(); //可行的原因在于vector在内存中就是一个连续存储的数组,...
1、下标方式[] 类似C++中数组的访问方式,vector容器的索引是从0开始的,和数组一样。需要保证下标 n 的值不会超过容器的容量,否则会发生访问越界的错误。 2、at() 当传给at()的索引值越界时,会抛出异常 3、遍历vector容器元素 根据size()获取vector容器的大小,遍历容器中的元素即可 ...
使用[] 操作符访问越界的下标:使用 [] 操作符访问 vector 时,不会进行边界检查,这可能导致访问越界。 使用at() 函数访问越界的下标:at() 函数会进行边界检查,如果访问越界,将抛出 std::out_of_range 异常。 使用迭代器遍历 vector 时越界:在使用迭代器遍历 vector 时,如果越界,可能导致程序崩溃。
不过通常知道push_back()足矣。 at() 参数是一个索引,返回这个位置的元素的值。与直接用[]符号访问的区别是,[]不会报越界的错误,而at()方法是安全的,会报数组越界的错误 reserve() 留存空间,vector本身会自动扩容,因此可以不必记住这个函数。 insert() 插入 erase() 删除...
下面代码中,A和B两行代码有何区别? void simple(std::vector<int> v) { v[0]; // A v.at(0); // B } 破冰 上面A和B两行代码都是在访问v的第一个元素,区别如下 当v非空,则没有区别; 当v为空,B会抛出一个std::out_of_range,至于A的行为,标准未作出声明。
通过operator[] 或at() 直接修改元素内容: 代码语言:javascript 复制 v[0] = 10; v.at(2) = 20; 第五章:vector 的迭代器与遍历 5.1 迭代器 vector 提供了多种迭代器类型,便于对元素进行遍历、修改或访问。 迭代器类型 功能 begin() 返回指向容器第一个元素的迭代器 end() 返回指向容器末尾的迭代器 rb...