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>>的使用及注意点(方法报错)
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