C++笔记之vector的初始化以及assign()方法
—— 2023年4月15日 上海
code review
文章目录
- C++笔记之vector的初始化以及assign()方法
- 代码——实践出真知
- 0. 空的vector
- 1. 花括号(initializer_list)——最推荐的初始化方法
- 2. 花括号
- 3. 圆括号+花括号
- 4. 圆括号
- 5. 圆括号
- 6. 指针+花括号
- 7. 指针+圆括号
- 10. 用一个数组特定范围的元素作为vector的初值(通过迭代器产生容器)——重要:
- 11. 拷贝另一个vector区间内的元素(通过迭代器产生容器)——重要:
- 8. 拷贝另一个vector——最推荐的初始化方法
- 9. 把另一个vector压到这个vector中
- 8和9的区别
- 12.把yaml中的数组加载到vector中
- 13.把ros中message的数组赋值给vector
- 14.赋值或修改一个已经定义的vetor
- 15.C++的vector使用圆括号初始化和使用花括号初始化有什么区别?
- 16.assign()
- 17.一些错误的声明方式
- 17.1.不能在声明变量的同时调用成员函数。
- 17.2不能这样声明
- 18.如果我初始化vector时,只指定大小,不指定元素的value,那么元素的value会是多少?
代码——实践出真知
运行
代码
// Example program
#include <iostream>
#include <string>
#include <vector>
void Print(std::string v_name, const auto v) {
std::cout << v_name << "= ";
for (auto &elem : v) {
std::cout << elem << " ";
}
std::cout << std::endl;
}
int main() {
std::vector<int> v1{1, 2, 3, 4, 5};
std::vector<int> v2 = {1, 2, 3, 4, 5};
std::vector<int> v3({1, 2, 3, 4, 5});
std::vector<int> v4{(1, 2, 3, 4, 5)};
std::vector<int> v5(v1);
std::vector<int> v6{v1};
std::vector<int> v7({v1});
std::vector<int> v8{(v1)};
std::vector<int> v9 = std::vector<int>({1, 2, 3, 4, 5});
std::vector<std::vector<int>> v11{{1, 2, 3, 4, 5}};
// std::vector<std::vector<int>> v31({1, 2, 3, 4, 5}); // error
// std::vector<std::vector<int>> v41{(1, 2, 3, 4, 5)}; // error
// std::vector<std::vector<int>> v51(v1); // error
std::vector<std::vector<int>> v61{v1};
std::vector<std::vector<int>> v611{{v1}};
std::vector<std::vector<int>> v71({v1});
std::vector<std::vector<int>> v81{(v1)};
Print("v1", v1);
Print("v2", v2);
Print("v3", v3);
Print("v4", v4);
Print("v5", v5);
Print("v6", v6);
Print("v7", v7);
Print("v8", v8);
Print("v9", v9);
std::cout << "v1[0]= " << v1[0] << std::endl;
std::cout << "v2[0]= " << v2[0] << std::endl;
std::cout << "v3[0]= " << v3[0] << std::endl;
std::cout << "v4[0]= " << v4[0] << std::endl;
std::cout << "v5[0]= " << v5[0] << std::endl;
std::cout << "v6[0]= " << v6[0] << std::endl;
std::cout << "v7[0]= " << v7[0] << std::endl;
std::cout << "v8[0]= " << v8[0] << std::endl;
std::cout << "v9[0]= " << v9[0] << std::endl;
std::cout << "v11[0][0] = " << v11[0][0] << std::endl;
// std::cout << "v41[0][0] = " << v41[0][0] << std::endl; // error
std::cout << "v61[0][0] = " << v61[0][0] << std::endl;
std::cout << "v611[0][0]= " << v611[0][0] << std::endl;
std::cout << "v71[0][0] = " << v71[0][0] << std::endl;
std::cout << "v81[0][0] = " << v81[0][0] << std::endl;
}
0. 空的vector
std::vector<int>;
1. 花括号(initializer_list)——最推荐的初始化方法
vector<int> v5{1, 2, 3, 4, 5}; // 创建一个包含1、2、3、4、5的元素的vector
2. 花括号
std::vector<int> myvec={3,4,5};
3. 圆括号+花括号
std::vector<int> myvec({3,4,5});
4. 圆括号
vector<int> v1(5, -1); // 创建一个包含5个值为0的整数的vector
5. 圆括号
vector<int> v2(10); // 创建一个包含10个未初始化元素的vector
6. 指针+花括号
std::vector<int>* p;
p = new vector<int>{ 1,2,3 };
7. 指针+圆括号
std::vector<int>* p;
p = new vector<int>(3,1);
10. 用一个数组特定范围的元素作为vector的初值(通过迭代器产生容器)——重要:
int ia[8]={1,1,2,3,4,5,6,7};
std::vector<int> myvec(ia,ia+8);
11. 拷贝另一个vector区间内的元素(通过迭代器产生容器)——重要:
vector<int> v4(v1.begin(), v1.begin() + 3); // 创建一个包含v1的前3个元素的vector
std::vector<int> v10(v1.begin(), v1.end()); // 创建一个包含v1的所有元素的vector
8. 拷贝另一个vector——最推荐的初始化方法
vector<int> v3(v1); // 使用v1的元素来创建一个新的vector
9. 把另一个vector压到这个vector中
vector<int> v3{v1}; // 使用v1的元素来创建一个新的vector
8和9的区别
12.把yaml中的数组加载到vector中
std::vector<std::string> abc= config["father_node"]["child_node_2"].as<std::vector<std::string>>();
13.把ros中message的数组赋值给vector
略!!!
14.赋值或修改一个已经定义的vetor
15.C++的vector使用圆括号初始化和使用花括号初始化有什么区别?
16.assign()
std::vector::assign() 函数可以用于将指定的元素分配到 std::vector 中,覆盖原有元素。std::vector::assign() 函数有多个重载形式,可以接受不同类型的参数,下面列出其中的两个常用重载形式: