标签:属性 lib 重载 occurs 目录 printf 其他 指针 while
每天读一点点C++primer!半年读完就可以!
@
8.1
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
istream& task(istream &a) {
string m;
while (a >> m) {
cout << m << endl;
}
a.clear();
return a;
}
int main()
{
std::filebuf in;
if (!in.open("E:/GitCode/Messy_Test/testdata/istream.data", std::ios::in)) {
std::cout << "fail to open file" << std::endl;
return;
}
istream wss(&in);
task(wss);
}
istream是所有输入类型的基类,直接cin调用即可。
6.2.1
#include "stdio.h"
void change(int* a, int* b) {
int c = *a;
*a = *b;
*b = c;
}
int main() {
int a, b;
a = 1;
b = 2;
int* c = &a;
int* d = &b;
change(c, d);
printf("a=%d b=%d",a,b);
}
6.2.2
#include "stdio.h"
void change(int& a, int& b) {
int c = a;
a = b;
b = c;
}
int main() {
int a, b;
a = 1;
b = 2;
change(a, b);
printf("a=%d b=%d", a, b);
}
6.2.3
#include "stdio.h"
#include <string>
std::string::size_type find_char(std::string& const s,char c,std::string::size_type &occurs) {
auto ret = s.size();
occurs = 0;
for (decltype(ret)i = 0; i != s.size(); i++) {
if (s[i] == c) {
if (ret == s.size()) {
ret = i;
}
++occurs;
}
}
return ret;
}
int main() {
std::string s = "sdafodsago";
std::string::size_type ctr;
auto index = find_char(s, ‘o‘, ctr);
}
问题:我不明白一个课后问题,为什么std::string::size_type find_char(std::string& const s,char c,std::string::size_type &occurs)这个函数三个参数必须分别是现在的格式?或者说第一个参数用引用比不用引用好在哪里?(必须被定义为const的前提下)
明天打算重读引用那一章找出答案。
int *matrix[10]; //十个指针构成的数组
int (*matrix)[10]; //指向含有十个整数的数组的指针
6.2.4
#include "stdio.h"
#include<iostream>
#include<string>
using namespace std;
int function(int a,int *b,int *c) {
std::cout<< *c++;
std::cout << *c++;
return 0;
}
void error_msg(initializer_list<string> il) {
for (auto beg = il.begin(); beg != il.end(); beg++) {
cout << *beg;
}
}
void add(initializer_list<int> il) {
int sum = 0;
for (auto beg = il.begin(); beg != il.end(); beg++) {
sum += *beg;
}
cout << sum;
}
int main(int argc, char **argv) {
int a = 1,b = 2;
int *c = &b;
int j[2] = { 0,1 };
//function(a, c,j);
argv[0];
//std::cout << argv[1] << argv[2];
}
6.3.2
#include "stdio.h"
#include<iostream>
#include<string>
using namespace std;
char &get_val(string &str, string::size_type ix) {
return str[ix];
}
int main() {
string s("a value");
cout << s << endl;
get_val(s, 0) = ‘A‘;
cout << s << endl;
return 0;
}
#include "stdio.h"
#include<iostream>
#include<string>
#include<vector>
#include <cstdlib>
using namespace std;
char &get_val(string &str,string::size_type ix) {
return str[ix];
}
int mainx() {
return 100000;
}
vector<string> process() {
return { "i","am","sb" };
}
int (*func(int i))[10]{
return 0;
}
//尾置返回类型
auto funcc(int i)->int(*)[10]{
}
//decltype
int odd[] = { 1,3,5,7,9 };
decltype(odd) *arrPtr(int i) {
}
string *testO(string &a) {
}
const string &shorterString(const string & s1, const string &s2) {
return s1.size() <= s2.size() ? s1 : s2;
}
string &shorterString(string &s1, string& s2) {
}
int main() {
string a[] = {"a","b","c"};
testO(&a[]);
string s("a value");
cout << s << endl;
get_val(s, 0) = ‘A‘;
cout << s << endl;
return EXIT_FAILURE;
return EXIT_SUCCESS;
}
__func__存放函数名
__FILE__存放文件名的字符串字面量
__LINE__存放当前行号的整型字面量
__TIME__存放文件编译时间的字符串字面量
__DATE__存放文件编译日期的字符串字面量
char在函数类型转换是对于int和short会匹配int
const类型转换:判别方式是判断实参是否是常量来决定选择哪个函数。指针类型的形参判别也是类似的。
类型提升:不是完全相同,皆会提升类型,char会提升为int。
算术类型转换:该转换的级别都相同,即3.14是double,转换成long或者float都是同样等级,会产生二义性。
·typedef int(*p)(int a, int b);
声明函数指针,未初始化,p为指向函数的指针。使用typedef的声明语句定义的不再是变量而是类型别名就是将变量转化为类型别名的一种方式,p原来是指向函数的指针变量,现在变成了指向函数的指针变量的类型别名.
#include <iostream>
#include <string>
void print(const int ia[], size_t size) {
#ifndef NDEBUG
//__func__存放函数名
//__FILE__存放文件名的字符串字面量
//__LINE__存放当前行号的整型字面量
//__TIME__存放文件编译时间的字符串字面量
//__DATE__存放文件编译日期的字符串字面量
std::cerr << __func__ << ":array size is " << size << std::endl;
#endif // !1
}
int calc(int&, int&);
int calc( int& const, int& const);
bool(*pf)(const std::string &, const std::string &);
//pf=lengthCompare;
//pf=&lengthCompare;
void main() {
const int ia[3] = { 1,2,3 };
print(ia, 3);
}
考试,,其实是玩了一天dota2(悲)
#include <string>
#include <iostream>
struct Sales_data {
std::string bookNo;
std::string units_sold;
std::string revenue;
std::string isbn() const { return bookNo; }
//const作用是修改隐式this指针的类型
//std::string Sales_data::isbn(const Sales_data *const this) {
// return this->isbn;
//}
Sales_data& combine(const Sales_data &rhs);
};
Sales_data& Sales_data::combine(const Sales_data &rhs) {
units_sold += rhs.units_sold;
revenue += rhs.revenue;
return *this;
}
std::ostream &print(std::ostream&, const Sales_data&);
std::istream &read(std::istream&, const Sales_data&);
std::istream &read(std::istream& is, const Sales_data& item){
double price = 0;
is >> item.bookNo >> item.units_sold >> price;
}
Sales_data total(cin);
if (cin)
{
Sales_data trans(cin);
do
{
if (total.isbn() == trans.isbn())
total.combine(trans);
else
{
print(cout, total) << endl;
total = trans;
}
}while (read(cin, trans));
print(cout, total)<<endl;
}
else
{
cerr << "No data?!"<<endl;
}
标签:属性 lib 重载 occurs 目录 printf 其他 指针 while
原文地址:https://www.cnblogs.com/treblez/p/13283088.html