标签:访问 内存 断言 namespace str stream iterator 容器类 int
#include <iostream> #include <vector> using namespace std; void print_vec(const std::vector<int>& vec) { for (auto x : vec) { std::cout << ‘ ‘ << x; } std::cout << ‘\n‘; } int main() { vector<int> vecInt; vecInt.push_back(1); vecInt.push_back(2); /////////一.元素访问 ///////////// //1.at会进行越界检查 越界时,会报std::out_of_range的异常 //而[]操作, 会报断言错误, 这个try是抓取不了的 try { cout << vecInt.at(2) << endl; } catch (std::out_of_range) { cout << "存在越界问题" << endl; } //2.front() 第一个元素 cout << "第一个元素: " << vecInt.front() << ", 地址: "<< &(vecInt.front())<< endl; //3.back() 最后一个元素 cout << "最后一个元素: " << vecInt.back() << ", 地址: " << &(vecInt.back()) << endl; //4. data() 返回第一个元素对应的地址 !!记得带() cout << "data():" << vecInt.data() << endl; cout << "data+1:" << vecInt.data() + 1 << endl; //指针加1,就是指向下一个元素. /////////二.迭代器 ///////////// //1.begin,cbegin 后者返回一个const_iterator,表示所指向的数据不能够修改,类似有常量指针吧. //2.end, cend 前者指向vector最后元素的后一元素,该元素表现为占位符,访问会导致未定义行为. //3.rbegin, rcbegin 前者指向容器最后元素,若vector为空,则返回值等于rend(). /////////三.容量 ///////////// //1.empty() cout << "Is empty?" << vecInt.empty() << endl; //2.size() 当前vector元素的个数 cout << "size():" << vecInt.size() << endl; //3.max_size() 此值反映容器大小上的理论上限,可用的RAM总量会影响该值. cout << "Maximum size of a ‘vector‘ is" << vecInt.max_size() << endl; //4.reserve(new_cap) 增加vector的容量.若new_cap大于当前的capacity(),则分配新内存,此时所有迭代器和引用都被非法化,否则不做处理. //reserve()不更改vector的size(). //5.capacity() 返回分配的容量值 cout << "capacity(): " << vecInt.capacity() << endl; //6.shrink_to_fit请求移除未使用的容量 vector<int> vecInt2; cout << "default capacity:" << vecInt2.capacity() << endl; vecInt2.reserve(100); cout << "after reserve capacity:" << vecInt2.capacity() << endl; vecInt2.clear(); cout << "after clear capacity:" << vecInt2.capacity() << endl; vecInt2.shrink_to_fit(); cout << "after shrink_to_fit capacity:" << vecInt2.capacity() << endl; /////////四.修改器 ///////////// //1.clear() 清空vector,执行后size()为0 //2.insert(pos, n, val),其中n可以省略:表示插入到pos前面,返回值是插入元素的迭代器. //insert(iterator pos, InputIt first, InputIt last);可以插入容器类型的元素的全部或者部分. std::vector<int> vec(3, 100); print_vec(vec); cout << "capacity1:" << vec.capacity() << endl; auto it = vec.begin(); it = vec.insert(it, 200); print_vec(vec); cout << "capacity2:" << vec.capacity() << endl; it = vec.insert(it, 2, 300); print_vec(vec); cout << "capacity3:" << vec.capacity() << endl; // "it" 不再合法,获取新值: it = vec.begin(); std::vector<int> vec2(2, 400); vec.insert(it + 2, vec2.begin(), vec2.end()); print_vec(vec); cout << "capacity4:" << vec.capacity() << endl; int arr[] = { 501,502,503 }; vec.insert(vec.begin(), arr, arr + 3); print_vec(vec); cout << "capacity5:" << vec.capacity() << endl; //3.erase(pos) 移除位于pos的元素 //erase(first, last) 移除范围[first, last)的元素 //会非法化位于擦除点或之后的迭代器,包含end()迭代器. //4.push_back //5.pop_back 移除末尾元素 //swap(vector &other) 将内容与other交换. vector<int> vecInt3; vecInt3.swap(vecInt); cout << "vecInt:"; print_vec(vecInt); cout << "vecInt3:"; print_vec(vecInt3); return 0; }
标签:访问 内存 断言 namespace str stream iterator 容器类 int
原文地址:https://www.cnblogs.com/Stephen-Qin/p/12690302.html