using std::cin; // 正确 using std::cout, std::endl; // 错误
using namespace std;
string s1("value"); string s2(n, "c"); //n个"c"相连的字符串
string line; cin >> line; // 输入"hello world" cout << line << endl; // 输出"hello"
int main() { int choose; string content; cin >> choose; if (choose == 1) { while (getline(cin, content)) { cout << content << endl; } } else if (choose == 2) { while (cin >> content) { cout << content << "*****" <<endl; } } return 0; }
输入输出情况
1 afaf afa af afaf afa af af af
// 类似python的for循环 for (declaration: expression) { statement }
#include <iostream> #include <string> int main() { std::string str = "hello world"; for (auto a: str) { std::cout << a << std::endl; } return 0; }
vector <string> v5{"hi"}; // 正确,初始值为hi vector <string> v6("hi"); // 错误 vector <string> v7{10}; // 正确,10个容量的空vector vector <string> v8{10, "hi"}; // 正确,10个“hi”的vec
for范围循环,冒号前面的那个变量必须是新定义的(至少我到目前遇到的情况是这样的)
花括号和圆括号的区别
int *ptrs[10]; // ptrs是含有10个指针的数组 int &refs[10] = /*?*/; // 错误,数组内都应该是对象,没有引用的数组 int (*Parray)[10] = &arr; // 由内而外的理解,是给指向10个整数的数组的指针 int (&arrRef)[10] = arr; // 是个10个整数数组的引用 int *(&arry)[10] = ptrs; // 10个指针的数组的引用
有些情况下数组名常常看作一个指针
int ia[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; auto ia2(a) // 等于 int *ia2 = &ia[0]; 所有ia2是一个指针
decltype(ia)表示的是10个整数的数组
数组的指针支持运算,是迭代器
<iterator>中的begin()和end()函数分别返回数组的首元素指针和尾后指针(对string、vector类型同样适用)
auto n = end(arr) - begin(arr); // n 为ptrdiff_t类型,也是<cstddef>库中的类型,可为负值
指向先定义的变量的指针大于后定义的变量(变量类型要一致)
int main() { system("chcp 65001"); int a = 100, *p2 = &a; int b = 40, *p = &b; if (p2 > p) { cout << "*p2大于*p" << endl; } else { cout << "*p2小于*p" << endl; } }
在<cstring>中的一些函数
string str1 = "A example"; string str2 = "a example"; char ch1[] = "A example"; char ch2[] = "a example"; if (str1 < str2) \*...*\; // 比较的是字符串大小 if (ch1 < ch2) \*...*\; // 比较的是指针大小
vector与数组:
初始化时可以这么写:
int num[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; vector<int> v1(begin(num), end(num)); // vector中的数据位置与数据内容与数组num中的数据相同 vector<int> v2(num + 2, num + 6); // vector的内容为{2, 3, 4, 5}(包括开头,不包括结尾)
严格来讲c++没有多维数组。本节讲的多维数组实质上是指数组的数组。
对与多维数组的范围for循环,需设为引用,因为不设为引用,控制变量就为指针,而指针不能进行接下来的for范围循环
int a[10][20][30] = {1}; for (int (&x)[20][30]: a) { for (int (&y)[30]: x) { for (auto z: y) { cout << z << endl; } } }
int *p[4]; // 整形数组的指针 int (*p)[4]; // 指向含有4个元素的整形数组