重学C++之《C++ Premer》课后习题第3章

练习3.6

string s = "1234567";
for (auto &c : s) {
    c = 'X';
}
cout << s << endl;

练习3.7

  • 使用auto c,此时c是一个局部变量,对c的修改并不会反映到s中

练习3.11

  • for 语句合法,c为const char类型
const string s = "Keep out!";
for (auto &c : s) { }

练习3.13

vector<int> v1;                // 空
vector<int> v2(10);            // 10个初始化元素
vector<int> v3(10, 42);        // 10个元素,值都为42
vector<int> v4{10};            // 1个元素 值为10
vector<int> v5{10, 42};        // 2个元素,分别为10、42
vector<string> v6{10};         // 执行了对应构造函数,10个初始化元素
vector<string> v7{10, "hi"};   // 执行了对应构造函数,10个元素,值都为"hi"

练习3.19

  • 三种方式实现定义vector 10个元素,每个元素都为42
vector<int> v1(10, 42);
vector<int> v2{42,42,42,42,42,42,42,42,42,42};
vector<int> v3;
for (int i = 0; i < 10; ++i) {
	v3.push_back(42);
}

练习3.20

vector<int> v{1, 2, 3, 4, 5, 6, 7, 8, 9};
for (decltype(v.size()) i = 0; i < v.size()-1; ++i) {
    cout << v[i] + v[i+1] << " ";
}
cout << endl << "-----" << endl;
for (decltype(v.size()) i = 0; i < v.size() / 2; ++i) {
    cout << v[i] + v[v.size()-1-i] << " ";
}
cout << endl;
  • 输出如下
3 5 7 9 11 13 15 17 
-----
10 10 10 10

练习3.27

const char s[] = "hello";
cout << sizeof(s) << endl;   // 6
const char ca[] = {'h', 'e', 'l', 'l', 'o'};
cout << sizeof(ca) << endl;  // 5
const char *cp = ca;
while (*cp) {              // ca不以空字符结尾,不安全的代码
    cout << *cp << endl;
    ++cp;
}

练习3.43

int main() {
    int ia[3][4] = {0};
    int size = sizeof(ia) / sizeof(int);
    // 赋值
    for (int i = 0; i < size; ++i) {
        *(*ia + i) = i;
    }
    // 打印版本1
    for (int (&r)[4] : ia) {
        for (int num : r) {
            cout << num << " ";
        }
    }
    cout << endl;
    // 打印版本2
    for (int i = 0; i < 3; ++i) {
        for (int j = 0; j < 4; ++j) {
            cout << ia[i][j] << " ";
        }
    }
    cout << endl;
    // 打印版本3
    for (int (*p)[4] = ia; p != ia+3; ++p) {
        for (int *q = *p; q != *p+4; ++q) {
            cout << *q << " ";
        }
    }
    cout << endl;
    return 0;
}

练习3.45

int main() {
    //char32_t s = U'\u4e2e';
    //wcout.imbue(loc);
    //:wcout << test << endl;
    //Test test = Test();
    //test.print();
  //  try {
  //      s.at(2);
  //  }
  //  catch(runtime_error err) {
  //      cout << err.what() << endl;
  //  }

    int ia[3][4] = {0};
    int size = sizeof(ia) / sizeof(int);
    for (int i = 0; i < size; ++i) {
        *(*ia + i) = i;
    }
    for (auto &r : ia) {
        for (int num : r) {
            cout << num << " ";
        }
    }
    cout << endl;
    // 这里使用标准库的begin,end更好,具体见书中P115
    for (auto p = ia; p != ia+3; ++p) {
        for (auto q = *p; q != *p+4; ++q) {
            cout << *q << " ";
        }
    }
    cout << endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值