目录
C++中的一种容器数据类型, 也叫单端数组, 可动态扩展, 并不是在原空间上进行扩展,而是重新找更合适的内存空间, 将原来的数据拷贝到新空间,并释放原来的空间, 迭代器支持随机访问
通过vector<数据类型> 对象名, 可创建vector, 数据类型可以是标准数据类型, 也可以是自定义类型
- //指定容器中元素数据类型为string
- vector
v1;
- class Myclass
- {
- public:
- Myclass() {};
- Myclass(string name, int age) :m_name(name), m_age(age) {};
- string m_name;
- int m_age;
- };
-
- Myclass m("aaa", 1);
- //容器中元素的类型为Myclass
- vector
v1;
- Myclass m("aaa", 1);
- vector
v1; - //拷贝构造方式创建
- vector
v2(v1) ; - //通过迭代器容器方式创建
- vector
v3(v1.begin(), v1.end()) ; - //创建v4, 并插入5个m对象
- vector
v4(5, m) ;
通过vector<数据类型> 对象名2 = 对象名1, 进行赋值
- vector
v1; - vector
v2 = v1;
assign是用新的元素替换原来vector的元素
- //通过迭代器区间方式进行赋值
- v2.assign(v1.begin(), v1.end());
- //给容器v1, 赋值5个字符串a
- v1.assign(5, "a");
- //通过迭代器区间方式进行赋值
- v2.assign(v1.begin(), v1.end());
-
- Myclass m("aaa", 1);
- //容器中元素的类型为Myclass
- vector
v1; - //给容器v1, 赋值5个m对象
- v1.assign(5, m);
insert是向vector指定位置, 添加元素, 支持一次添加多个元素
- //表示在首元素位置, 以此插入3个字符串b
- v1.insert(v1.begin(), 3, "b");
- //表示在首元素位置, 插入字符串c
- v1.insert(v1.begin(), "c");
- Myclass m1("aaa", 1);
- vector
v1; - //在首元素处插入m1
- v1.insert(v1.begin(), m1);
- //在首元素处插入2个m1
- v1.insert(v1.begin(), 2, m1);
push_back是在vector的尾部添加元素, 只能单个添加
- vector
v1; - v1.assign(3, "a");
- //在尾部添加c
- v1.push_back("c");
- Myclass m1("aaa", 1);
- Myclass m2("bbb", 2);
- vector
v1; - v1.assign(3, m1);
- //在尾部添加m2
- v1.push_back(m2);
通过对象名[索引]或者对象名.at(索引), 获取vector中的元素
- //通过索引方式查询
- cout << v1[0] << endl;
- //通过at方式查询
- cout << v1.at(1) << endl;
- //获取首元素
- cout << v1.front() << endl;
- //获取尾元素
- cout << v1.back() << endl;
- Myclass m1("aaa", 1);
- Myclass m2("bbb", 2);
- Myclass m3("ccc", 3);
- vector
v1; - v1.push_back(m1);
- v1.push_back(m2);
- v1.push_back(m3);
-
- //通过索引方式查询
- cout << v1[0].m_name << endl;
- //通过at方式查询
- cout << v1.at(1).m_name << endl;
- //获取首元素
- cout << v1.front().m_name << endl;
- //获取尾元素
- cout << v1.back().m_name << endl;
通过对象名.capacity(), 获取vector的容量大小
cout << v1.capacity() << endl;
通过对象名.size(), 获取vector的元素个数
cout << v1.size() << endl;
通过对象名1.size(对象名2), 交换两个vector的元素, 两个vector的数据类型需要一致
v1.swap(v2);
通过对象名.erase(迭代器位置), 删除元素
- //指定迭代器位置删除元素
- v1.erase(v1.begin());
- //删除尾部元素
- v1.pop_back();
通过对象名.clear(), 清空vector元素
- v1.clear();
- //指定迭代器区间清空元素
- v1.erase(v1.begin(), v1.end());
通过vector
- #include
- #include
- #include
-
- using namespace std;
-
- class Myclass
- {
- public:
- Myclass() {};
- Myclass(string name, int age) :m_name(name), m_age(age) {};
- string m_name;
- int m_age;
- };
-
- void print_v(vector
>& v) - {
- //it为外层vector的第一个元素迭代器
- for (vector
>::iterator it = v.begin(); it != v.end(); it++) - {
- //vit为内层vector的第一个元素迭代器
- for (vector
::iterator vit = (*it).begin(); vit != (*it).end(); vit++) - {
- cout << vit->m_name << endl;
- }
- }
- }
-
- int main()
- {
- Myclass m1("aaa", 1);
- vector
v1; - vector
> v2; - v1.push_back(m1);
- v2.push_back(v1);
-
- print_v(v2);
-
- system("pause");
-
- return 0;
- }