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++常用基础知识—STL库(2)
C++常用基础知识—STL库(2)
68 5
|
30天前
|
存储 C++ 索引
【C++打怪之路Lv9】-- vector
【C++打怪之路Lv9】-- vector
20 1
|
1月前
|
存储 自然语言处理 程序员
C++常用基础知识—STL库(1)
C++常用基础知识—STL库(1)
52 1
|
1月前
|
编译器 C++
【C++】—— vector模拟实现
【C++】—— vector模拟实现
|
1月前
|
算法 安全 Linux
【C++STL简介】——我与C++的不解之缘(八)
【C++STL简介】——我与C++的不解之缘(八)
|
1月前
|
算法 数据处理 C++
c++ STL划分算法;partition()、partition_copy()、stable_partition()、partition_point()详解
这些算法是C++ STL中处理和组织数据的强大工具,能够高效地实现复杂的数据处理逻辑。理解它们的差异和应用场景,将有助于编写更加高效和清晰的C++代码。
22 0
|
1月前
|
算法 C++ 容器
C++之打造my vector篇(下)
C++之打造my vector篇(下)
26 0
|
1月前
|
存储 编译器 C++
C++之打造my vector篇(上)
C++之打造my vector篇(上)
25 0
|
1月前
|
算法 C++ 容器
【C++】—— vector使用
【C++】—— vector使用
|
1月前
|
存储 缓存 C++
C++番外篇——list与vector的比较
C++番外篇——list与vector的比较
21 0