首页 > 编程语言 >学习笔记-C++ STL篇

学习笔记-C++ STL篇

时间:2022-09-26 23:55:43浏览次数:76  
标签:STL void ++ 笔记 blog int C++ printf vec

1、C++中vector作为参数的三种传参方式(传值 && 传引用 && 传指针)

https://blog.csdn.net/weixin_47641702/article/details/113522865

c++中常用的vector容器作为参数时,有三种传参方式,分别如下:
function1(vector vec),传值
function2(vector &vec),传引用
function3(vector *vec),传指针
注意,三种方式分别有对应的const形式,不在此讨论。
三种方式对应的调用形式分别为:
function1(vec),传入值
function2(vec),传入引用
function3(&vec),传入地址
三种方式的效果分别为:
会发生拷贝构造
不会发生拷贝构造
不会发生拷贝构造

2、error: creating array of references( declaration of 'a' as array)

https://blog.csdn.net/cs_zlg/article/details/8332622

错误程序:

#include <iostream>
using namespace std;
 
void func(int& a[], int n) {
    for(int i = 0; i < n; i++)
        a[i]++;
}

int main() {
    int a[3] = {1, 2, 3};
    func(a, 3);
    cout << a[0] << ' ' << a[1] << ' ' << a[2] << endl;
    return 0;
}

而这里给函数传递的是数组a的首地址,地址是无法再取地址的。实际上,把a的首地址传给函数后,函数已经获得修改数组a元素的能力。
解决方法:把函数func的参数列表中的“int& a[]”改为“int a[]”即可。

3、C++中给函数传参二维数组

https://blog.csdn.net/ManiacLook/article/details/124721648

void f1(int a[N][M]);
void f2(int a[][N]);
void f3(int (*a)[N]);
void f4(int *a);

#include <stdio.h>

/*********************************
* 方法1: 第一维的长度可以不指定 *
* 但必须指定第二维的长度 *
*********************************/

void print_a(int a[][5], int n, int m){
    int i, j;
    
    for(i = 0; i < n; i++){
        for(j = 0; j < m; j++)
            printf("%d ", a[i][j]);
        
        printf("\n");
    }
}

/*****************************************
*方法2: 指向一个有5个元素一维数组的指针 *
*****************************************/
void print_b(int (*a)[5], int n, int m){
    int i, j;
    
    for(i = 0; i < n; i++){
        for(j = 0; j < m; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }
}

/***********************************
*方法3: 利用数组是顺序存储的特性, *
* 通过降维来访问原数组! *
***********************************/
void print_c(int *a, int n, int m) {
    int i, j;
    
    for(i = 0; i < n; i++) {
        for(j = 0; j < m; j++)
            printf("%d ", *(a + i*m + j));
        
        printf("\n");
    }
}
int main(void) {
    int a[5][5] = {{1, 2}, {3, 4, 5}, {6}, {7}, {0, 8}};
    
    printf("\n方法1:\n");
    print_a(a, 5, 5);
    
    printf("\n方法2:\n");
    print_b(a, 5, 5);
    
    printf("\n方法3:\n");
    print_c(&a[0][0], 5, 5);
 
    return 0;
}

4、vector<pair<int,int>>的使用及注意点(方法报错)

https://blog.csdn.net/weixin_44915226/article/details/107362610?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1-107362610-blog-81628852.t0_edu_mlt&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2~default~CTRLIST~Rate-1-107362610-blog-81628852.t0_edu_mlt&utm_relevant_index=1

power.emplace_back(make_pair(1,1));
power.emplace_back(2,2);

5、c++中为什么push_back({1,2})可以,emplace_back({1,2})会报错?

https://www.zhihu.com/question/438004429/answer/1731168143

6、

标签:STL,void,++,笔记,blog,int,C++,printf,vec
From: https://www.cnblogs.com/islch/p/16733036.html

相关文章

  • Flask学习笔记(五)-Flask通过Ajax传输JSON数据
    一.创建项目结构项目文件夹flask-ajax-demo,结构如下: 其中app.py是Python程序,user.html是静态页面。二.发起Ajax请求编写user.html,代码如下:<!DOCTYPEhtml><html......
  • vim_vim学习笔记
    普通模式-->插入模式i,表示inserta,表示appendo表示oneline(暂且这样理解)插入模式-->普通模式esc,模式就是这个键jj和capslock需要配置普通模式......
  • 「浙江理工大学ACM入队200题系列」问题 J: 零基础学C/C++83——宁宁的奥数路
    本题是浙江理工大学ACM入队200题第八套中的J题我们先来看一下这题的题面.题面题目描述宁宁参加奥数班,他遇到的第一个问题是这样的:口口口+口口口=口口口,宁宁需要将1~9......
  • 《被讨厌的勇气》读书笔记
    1、如果一味地关注过去的原因,企图仅仅靠原因去解释事物,那就会陷入“决定论”。也就是说,最终会得出这样的结论:我们的现在甚至未来全部都由过去的事情所决定,而且根本无法改......
  • Swin Transformer 论文精读笔记
    参考https://www.bilibili.com/video/BV13L4y1475U/?spm_id_from=333.788&vd_source=920f8a63e92d345556c1e229d6ce363fICCV最佳论文:SwinTransformer  Swin,其实就......
  • 【笔记】Java相关大杂烩①
    【笔记】Java相关大杂烩Java程序的执行流程是?*.java文件-->*.class文件-->类装载器-->字节码校验器-->解释器-->操作系统平台Java程序执行时哪一个环节会测试代码段......
  • c++基础入门自学笔记总结4---通讯录管理系统
    没过几天通讯录也终于做完了,今天就为我们近三个星期的c++初级学习画上一个完美的句号吧系统需求通讯录是一个可以记录亲人、好友信息的工具。本教程主要利用C++来实现......
  • Flask学习笔记(四)-Response对象+表单实例
    一、响应对象responseflask提供了Response最为视图最终返回的数据,但在代码编写过程中,我们通常很少直接使用Response对象,下面是几个常见的视图返回数据的方式fromflask......
  • C++11
    1.新增不需要赋值即可初始化//C++98inta=1;int*p1=newint[3];Dated1(2022,9,26);//C++11Dated2{2022,9,27};int*p2=......
  • sql server to mysql迁移笔记
    工具:dbeaver导出数据结构,注意guid会被解读成varchar16,需要手动改为varchar36mysql中没有getdate()默认值函数,需要手动建立外键,主键,自增把项目中的地址改为mysql的,注意......