c++基础知识——STL之vector,字符数组;

简介: c++基础知识——STL之vector,字符数组;

前言


提示:这里可以添加本文要记录的大概内容:


前面我们学习了c++中的相关知识,今天将c++基础知识中的STL讲完,在此之前,先来复习一下数组;

提示:以下是本篇文章正文内容,下面案例可供参考


一、数组的相关应用


1.冒泡排序和选择排序


选择排序


a740d65a66e67eb5e30a784431688430_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


代码如下(示例):


//按照降序排列
#include<iostream>
using namespace std;
int main(void)
{
  int a[100];
  int n;
  cin >> n;
  for (int i = 0; i < n; i++)
  {
  cin >> a[i];
  }
  for (int i = 0; i < n - 1; i++)
  {
  for (int j = i + 1; j < n; j++)
  {
    if (a[j] > a[i])
    {
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
    }
  }
  }
  for (int i = 0; i < n; i++)
  {
  cout << a[i] << " ";
  }
  cout << endl;
}


04ab2ce81c2790d058ae175cd0310d1d_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


冒泡排序


冒泡排序就是每两个数据之间进行比较,相对于选择排序,时间复杂度更大.


//按照降序排列
#include<iostream>
using namespace std;
const int N = 100;
int main(void)
{
  int n;
  int a[N];
  cin >> n;
  for (int i = 0; i < n; i++)
  {
  cin >> a[i];
  }
  for (int i = 0; i < n -1; i++)
  {
  for (int j = 0; j < n - 1 - i; j++)
  {
    if (a[j] < a[j+1])
    {
    int temp = a[j];
    a[j] = a[j+1];
    a[j+1] = temp;
    }
  }
  }
  cout << "冒泡排序的结果为:" << endl;
  for (int i = 0; i < n; i++)
  {
  cout << a[i] << " ";
  }
  cout << endl;
}


6cec17f22ca021080573c7711b5e9eda_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


二分法查询(折半查询)


我们在对数据进行查询时,尤其是涉及到很多的数据的时候,如果利用循环进行查找的时候,会增大时间复杂度,这个时候利用二分法查询就可以提高效率,例如对所有中国人的信息查询,如果利用for()循环进行查询,则最多可能要查询13亿次,而利用二分法则30次就可以查询完毕.


d73e7edbcd508fa9199bec15c6d259f0_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


代码演示:


//按照降序排列
#include<iostream>
using namespace std;
const int N = 100;
int main(void)
{
  int n;
  int a[N];
  cin >> n;
  for (int i = 0; i < n; i++)
  {
  cin >> a[i];
  }
  int mid = (n) / 2;
  int m;
  cin >> m;//代表要查找的数;
  for (int i = 0; i<(n/2); i++)
  {
  if (a[mid] == m)
  {
    break;
  }
  else
  {
    if (a[mid] > m)
    {
    mid = (mid + 0) / 2;
    }
    else
    {
    mid = (mid + n - 1) / 2;
    }
  }
  }
  cout << "数据的位置在第:" << mid + 1 << "位";
  cout << endl;
}


5b12a613c670974d23b96fb09abfa331_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


二、STL之vector;


1.vector部分常用成员函数:


78c37c2ffe144de370e2dcb32e8db1ff_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


代码如下(示例):


vector之一维数组;
#include<iostream>
#include<vector>
using namespace std;
//输出向量中的所有元素
void prtVector(vector<int>a)
{
  for (int i = 0; i < a.size(); i++)
  {
  cout << a[i] << " ";
  }
  cout << endl;
}
int main(void)
{
  int n;
  cin >> n;
  vector<int>a(n);
  for (int i = 0; i < n; i++)
  {
  cin >> a[i];
  }
  prtVector(a);//调用函数输出动态数组;
  a.begin();
  cout << a.size() << endl;//数组长度;
  a.resize(2 * n, -1);
  prtVector(a);
  a.pop_back();
  prtVector(a);
  a.push_back(3);
  prtVector(a);
  a.insert(a.begin(), 10);//在起始位置插入10;
  prtVector(a);
  a.erase(a.begin() + 3);//删除第三个位置的元素;
  prtVector(a);
  a.clear();//清空数组;
}


29dd8c851f3b8e7376dedcc5c1ebe9ce_watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5b-D6ZqP6ICM5Yqo,size_20,color_FFFFFF,t_70,g_se,x_16.png


vector之二维数组;

当题目没有给出二维数组的行数和列数的时候,就可以利用vector来声明动态数组;

第一种方法:


#include<iostream>
#include<vector>
using namespace std;
int main(void)
{
  int a, b;//a行,b列;
  cin >> a >> b;
  vector<vector<int> >tv(a, vector<int>(b));//注意> >之间有空格;
  for (int i = 0; i < a; i++)
  {
  for (int j = 0; j < b; j++)
  {
    cin >> tv[i][j];
  }
  }
  for (int i = 0; i < a; i++)
  {
  for (int j = 0; j < b; j++)
  {
    cout << tv[i][j] << " ";
  }
  cout << endl;
  }
}



第二种方法:


#include<iostream>
#include<vector>
using namespace std;
int main(void)
{
  int a, b;
  cin >> a >> b;
  vector<vector<int>>tv;//定义一个动态二维数组;
  tv.resize(a);//重置二维数组的行数;
  for (int i = 0; i < a; i++)
  {
  tv[i].resize(b);//重置二维数组列数,其实也可以定义不同的列数;
  }
  for (int i = 0; i < a; i++)
  {
  for (int j = 0; j < b; j++)
  {
    cin >> tv[i][j];
  }
  }
  for (int i = 0; i < a; i++)
  {
  for (int j = 0; j < b; j++)
  {
    cout << tv[i][j] << " ";
  }
  cout << endl;
  }
}


一、字符串和字符数组的相关应用


1.字符串

字符串常量是以双引号引用的字符序列,字符串结束符时’\0’,所以字符串实际占用内存字节数比它的长度多一.


1.字符数组

一维字符数组:

定义:char a[10]

二维字符数组:

定义:char a[10][13]

字符数组的初始化:char a[ ]={‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’};

字符数组的重点在字符数组函数的应用:


4c3164f68f109d17c9082ba3fdbde990_e615066342a04710b7c3f5ab556d6adb.png


代码如下(示例):


#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
const int N = 80;
int main(void)
{
  char s[N], t[N];
  scanf("%s%s", s, t);
  printf("%s", s);
  cout << s << "    " << t << endl;
  cout << strlen(s) << "  " << strlen(t) << endl;
  strcpy(s, "hello word!");
  cout << s << endl;
  strcpy(t, "i like c++");
  cout << t << endl;
  strcat(s, t);//连接两个字符串;
  cout << s << endl;
  string str = s;
  cout << str;
  printf("%s", str.c_str());//成员函数c_str将string型数据转换为char型数据;
  return 0;
}


8a40a137a635bd6b18f72d16ec220561_a97df0c7de2f4f7797df3eef24775858.png



总结


本节讲了STL中的一些基础知识,下一节我们讲指针,熟练地掌握STL中的一些库函数,有助于帮助我们做题.

相关文章
|
1天前
|
C++ 编译器 程序员
C++ 从零基础到入门(3)—— 函数基础知识
C++ 从零基础到入门(3)—— 函数基础知识
|
5天前
|
存储 C++ 容器
C++:STL - set & map
C++:STL - set & map
14 4
|
6天前
|
编译器 C++ Windows
【C++】vector问题解决(非法的间接寻址,迭代器失效 , memcpy拷贝问题)
不使用memcpy函数不就可以了,然后我们使用简单粗暴的赋值拷贝,这样就不会发生浅拷贝问题了!!!
16 1
|
6天前
|
算法 安全 程序员
【C++】STL学习之旅——初识STL,认识string类
现在我正式开始学习STL,这让我期待好久了,一想到不用手撕链表,手搓堆栈,心里非常爽
15 0
|
7天前
|
存储 Serverless C++
【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]
【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]
10 1
|
8天前
|
存储 设计模式 算法
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
【C++/STL】stack和queue(容器适配器、优先队列、双端队列)
13 1
|
8天前
|
存储 编译器 C++
【C++/STL】list(常见接口、模拟实现、反向迭代器、)
【C++/STL】list(常见接口、模拟实现、反向迭代器、)
5 0
|
8天前
|
算法 C++ 容器
【C++/STL】vector(常见接口、模拟实现、迭代器失效)
【C++/STL】vector(常见接口、模拟实现、迭代器失效)
10 0
|
14天前
|
存储 算法 C++
详解C++中的STL(标准模板库)容器
【4月更文挑战第30天】C++ STL容器包括序列容器(如`vector`、`list`、`deque`、`forward_list`、`array`和`string`)、关联容器(如`set`、`multiset`、`map`和`multimap`)和容器适配器(如`stack`、`queue`和`priority_queue`)。它们为动态数组、链表、栈、队列、集合和映射等数据结构提供了高效实现。选择合适的容器类型可优化性能,满足不同编程需求。
|
16天前
|
存储 C++
【C++模板】模板实现通用的数组
【C++模板】模板实现通用的数组