关于c++11引入的array类,参考如下博客:
【C++】4-1.25 C++11的数组类std::array
https://blog.csdn.net/jn10010537/article/details/116669492
std::array数组对象,它的大小在编译阶段就确定了,容量大小不可变;
std::vector向量对象,它的容量可自动修改、增长;
vector向量是C++标准库里一种特殊的数据结构,可以看作是“动态数组”或者“不定长数组”的容器;
使用vector类,需要包含如下头文件:
#include
2.1、声明及定义vector对象
#include
// 声明vector对象
// 需要声明数组中存储的数据类型
// std::vector <数据类型> 动态数组名; 示例如下:
std::vector<int> vector_1(3, 0);
// 定义vector对象
//声明的时候可以一并赋初值,即定义;
//std::vector <数据类型> 动态数组名(num,somethiong); //在M里装num个somethiong
std::vector<int> vector_2(5, 1);//在vector_2里装5个1;
std::vector<int> vector_3(5); //在vector_3里装5个0;
std::vector<int> vector_4(vector_2); //拷贝构造,创建一个和vector_2一样的动态数组;
std::vector<int> vector_5(vector_2.begin(),vector_2.end())//继承vector_2下标[0,B.end()]的值;
... ...
2.2、vector对象的基本操作
若vector类的实例化对象的名称为: vector_obj;
2.2-1、返回vector_obj[i]的值
vector_obj.at(i)
vector_obj[i] //像array数组一样使用下标访问元素
2.2-2、返回vector_obj数组元素总个数
vector_obj.size();
2.2-3、返回vector_obj数组第一个元素的值
vector_obj.front();
2.2-4、返回vector_obj数组最后一个元素的值
vector_obj.back();
2.2-5、清空vector_obj数组
vector_obj.clear();
2.2-6、返回vector_obj数组第一个数的地址
vector_obj.begin();
2.2-7、返回vector_obj数组最后一个数的地址
vector_obj.end();
2.2-8、判断vector_obj数组是否为空,是空则返回1,否则返回0;
vector_obj.empty();
2.2-9、两个动态数组元素互换
vector_obj.swap(vector_obj_2);
// 或者
swap(vector_obj,vector_obj_2)
2.2-10、返回vector_obj数组的长度
vector_obj.capacity();
2.2-11、将vector_obj数组的长度设为num
vector_obj.resize(num);
2.2-12、从vector_obj数组最后,追加元素
vector_obj.push_back(something);
2.2-13、从vector_obj数组最后,删除一个元素
vector_obj.pop_back();
2.2-14、移除vector_obj数组position位置的元素,注意参数为迭代器
vector_obj.erase(position)
// 删除倒数第2个元素
vector_obj.erase(vector_obj.end()-2)
//最后两个元素删掉
vector_obj.erase(vector_obj.end()-2,vector_obj.end())
2.2-15、在vector_obj数组position位置,插入一个元素
vector_obj.insert(vector_obj.begin(), "csdn");//索引0位置插入"csdn"
以下示例:
vs2017社区版; Windows10; c++14标准;
#include
#include
#include
void out_print(int x,std::vector<std::string>str1)
{
std::cout << ">>>[" << x << "]={ ";
// 习惯上,迭代变量名应该用 i, j, k 等,其中变量名 j, k用于嵌套循环;
for (auto i : str1)
{
std::cout << i << " , ";
}
std::cout <<"}"<< std::endl;
}
int main()
{
// c++11的列表初始化方式,创建vector对象
std::vector<std::string> str1{
"jn","10","01","05","37" };
out_print(1,str1);
// 删除元素,最后两个元素删掉
// 接受迭代器参数
str1.erase(str1.end()-2,str1.end());
out_print(2,str1);
// 追加元素
str1.push_back("2021");
str1.push_back("05");
str1.push_back("23");
str1.push_back("18:17");
out_print(3,str1);
//用迭代器拷贝str1的内容,以创建新的str2对象;
std::vector<std::string> str2(str1.begin(),str1.end());
out_print(4,str2);
// 在str2中插入元素,参数是迭代器
str2.insert(str2.begin(), "csdn");
out_print(5,str2);
// 用拷贝构造函数的方式创建str3
std::vector<std::string> str3(str2);
out_print(6,str3);
// 用数组下标修改str3的内容
str3[0] = "sunday";
out_print(7, str3);
// 创建str4,初始化为多个相同的字符串;
std::vector<std::string> str4(3,"H__");
out_print(8,str4);
// 交换str4、str3
str4.swap(str3);
out_print(9, str4);
out_print(10, str3);
return 0;
}