c++ primer第五版(中文)习题答案 第三章第五节-数组
2015-11-11 21:43
411 查看
本博客知识记录自己学习中的笔记或者记录,如果有错误欢迎大家纠正。
转载声明出处
练习3.27 假设txt_size 是一个无参数的函数,它返回值是int。请回答下列哪个定义是非法的?为什么?
unsigned buf_size = 1024;
a.int ia[buf_size]; //错误 必须是常量表达式,
b.int ia[4*7-14]; //正确
c.int ia[txt_size()];//错误 ,必须是常量
d.char st[11] =”fundamental” //错误 没有空间存储‘\0’
练习 3.28 下列数组中元素的值是什么?
string sa[10]; //string不是内置类型,会被设置为空
int ia[10]; //内置函数 在函数体外部 会被设置为零
int main(){
string sa2[10]; //函数体内部 ,空
int ia[10]; //函数体内 ,内置函数不被设置为0
}
在vs2013中调试和预先想的一样。
练习 3.29 相比于vector 来说,数组有哪些缺点,请举例
1.不能动态增长 元素个数,
2.vector更好的支持std。
练习 3.30 指出下面代码中的索引错误
constexpr size_t array_size 10; //constexpr 新关键字 ,vs2013还不支持
int ia [array_size];
for(size_t ix =1;ix<=array_size;++ix)
ia[ix] =ix;
改正如下
for(size_t ix =0;ix
改编上面代码即可
练习 3.32 将上一题刚刚创建的数组拷贝给另一个数组,利用vector重写实现类似的功能
练习 3.33 对于104页的程序来说,如果不初始化score将发生什么?
会默认初始化为零
练习 3.34假定p1和p2指向一个数组中的元素,则下面程序的功能是什么?什么情况下该程序上非法的
p1 += p2 - p1
作用吧p1 移动到p2的位置,当p1比p2大的时候非法。
练习 3.35 练习 编写一段程序,利用指针将数组中的元素置为零
练习 3.36 编写一段程序,比较两个数组是否相等。在写一段程序,比较两个vector对象是否相等。
输出结果如下
练习3.37下面的程序是何含义,程序输出的结果是什么?
const char ca[] = {‘h’,’e’,’l’,’l’,’o’};
const char *cp =ca;
while(*cp){
cout<<*cp<
练习 3.40 编写一段程序,定义两个字符串并用字符串字面值初始化他们,接着在定义一个字符数组,存放前两个数组链接后的结果。使用strcpy和strcat把前两个数组的内容拷贝到第三个数组中。
练习 3.41 编写一段程序,用整形数组初始化一个vector对象。
练习3.42 编写一段程序,将含有整数元素的vector对象拷贝给一个整形数组。
在上面代码中已经实现。
转载声明出处
练习3.27 假设txt_size 是一个无参数的函数,它返回值是int。请回答下列哪个定义是非法的?为什么?
unsigned buf_size = 1024;
a.int ia[buf_size]; //错误 必须是常量表达式,
b.int ia[4*7-14]; //正确
c.int ia[txt_size()];//错误 ,必须是常量
d.char st[11] =”fundamental” //错误 没有空间存储‘\0’
练习 3.28 下列数组中元素的值是什么?
string sa[10]; //string不是内置类型,会被设置为空
int ia[10]; //内置函数 在函数体外部 会被设置为零
int main(){
string sa2[10]; //函数体内部 ,空
int ia[10]; //函数体内 ,内置函数不被设置为0
}
在vs2013中调试和预先想的一样。
练习 3.29 相比于vector 来说,数组有哪些缺点,请举例
1.不能动态增长 元素个数,
2.vector更好的支持std。
练习 3.30 指出下面代码中的索引错误
constexpr size_t array_size 10; //constexpr 新关键字 ,vs2013还不支持
int ia [array_size];
for(size_t ix =1;ix<=array_size;++ix)
ia[ix] =ix;
改正如下
for(size_t ix =0;ix
#include <iostream> int main(){ const size_t array_size =10; //改写为const 其余和上面差不多 int ia[array_size]; for (size_t ix = 0; ix < array_size; ++ix) ia[ix] = ix; for (size_t ix = 0; ix < array_size; ++ix) std::cout << ia[ix] << " "; system("pause"); return 0; }
改编上面代码即可
练习 3.32 将上一题刚刚创建的数组拷贝给另一个数组,利用vector重写实现类似的功能
#include <cstddef> #include <iostream> #include <vector> #include <iterator> using std::cout; using std::endl; using std::vector; using std::iterator; int main() { // use array int ia[10]; for (size_t i=0; i<10; ++i) ia[i] = i; int ia2[10]; for (size_t i=0; i<10; ++i) ia2[i] = ia[i]; // 使用vector vector<int> iv(10); for (auto iter = iv.begin(); iter != iv.end(); ++iter) *iter = iter - iv.begin(); vector<int> iv2(iv); ///输出 for (auto i : iv2) cout << i << " "; cout << endl; return 0; }
练习 3.33 对于104页的程序来说,如果不初始化score将发生什么?
会默认初始化为零
练习 3.34假定p1和p2指向一个数组中的元素,则下面程序的功能是什么?什么情况下该程序上非法的
p1 += p2 - p1
作用吧p1 移动到p2的位置,当p1比p2大的时候非法。
练习 3.35 练习 编写一段程序,利用指针将数组中的元素置为零
#include <iostream> int main() { int array[10]; int *p = array; for (int i = 0; i < 10;i++) *(p + i) = i; for (int i = 0; i < 10; i++) std::cout << " " << array[i] << " "; system("pause"); return 0; }
练习 3.36 编写一段程序,比较两个数组是否相等。在写一段程序,比较两个vector对象是否相等。
#include <iostream> #include <vector> int main() { int array1[10] = {0,1,2,3,4,5,6,7,8,9}; int array2[10] = { 0,1,2,3,4,5,8,7,8,9 }; bool isEqual = true; //线判断长度是否相等 if (std::end(array1) - std::begin(array1) != std::end(array2) - std::begin(array2)) { isEqual = false; } else { //数据不相等 for (size_t i = 0; i < std::end(array1) - std::begin(array1); i++) if (array1[i] != array2[i]) isEqual = false; } std::cout << "two array is " << (isEqual ? "equal" : "notEqual") << " "; std::vector<int> vetA = { 0,1,2 }; std::vector<int> vetB = { 2,1,2 }; std::cout << "\n two vector is " << (vetA == vetB ? "equal" : "notEqual") << " "; system("pause"); return 0; }
输出结果如下
练习3.37下面的程序是何含义,程序输出的结果是什么?
const char ca[] = {‘h’,’e’,’l’,’l’,’o’};
const char *cp =ca;
while(*cp){
cout<<*cp<
#include <iostream> #include <string> #include <cstring> int main() { // use string. std::string s1("iloveYou"); std::string s2("iloveLQ"); if (s1 == s2) std::cout << "same string." << std::endl; else if (s1 > s2) std::cout << "iloveYou > iloveLQ" << std::endl; else std::cout << "iloveYou < iloveLQ" << std::endl; std::cout << "=========" << std::endl; // use C-Style character strings. const char* cs1 = "iloveYou"; const char* cs2 = "iloveLQ"; auto result = strcmp(cs1, cs2); if (result == 0) std::cout << "same string." << std::endl; else if (result < 0) std::cout << "iloveYou < iloveLQ" << std::endl; else std::cout << "iloveYou > iloveLQ" << std::endl; system("pause"); return 0; }
练习 3.40 编写一段程序,定义两个字符串并用字符串字面值初始化他们,接着在定义一个字符数组,存放前两个数组链接后的结果。使用strcpy和strcat把前两个数组的内容拷贝到第三个数组中。
#include <iostream> #include <cstring> using std::cout; using std::endl; int main() { const char* cs1 = "iloveyou"; const char* cs2 = "LQ"; char cstr3[13]; //不知道怎么动态计算 cs1cs2的长度,然后相加 strcpy(cstr3, cs1); strcat(cstr3, " "); strcat(cstr3, cs2); std::cout << cstr3 << std::endl; system("pause"); return 0; }
练习 3.41 编写一段程序,用整形数组初始化一个vector对象。
#include <iostream> #include <vector> int main() { int array[10] = { 0,1,2,3,4,5,6,7,8,9 }; std::vector<int> vecI; for (int* i = std::begin(array); i < std::end(array);i++) { vecI.push_back(*i); } int array2[10]; for(int a:vecI) { std::cout << a << " "; array2[a] = a; } std::cout << std::endl; for (int* i = std::begin(array2); i < std::end(array2); i++) { std::cout << *i << " "; } system("pause"); return 0; }
练习3.42 编写一段程序,将含有整数元素的vector对象拷贝给一个整形数组。
在上面代码中已经实现。
相关文章推荐
- 6.c/c++程序员面试宝典-条件语句
- C++11新特性之 Static assertions 和constructor delegation
- C++11新特性之 Static assertions 和constructor delegation
- C++ const限定符总结(C++ primer)
- 欢迎使用CSDN-markdown编辑器
- hdu Flood-it!(IDA*算法)
- 玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest
- 黑马程序员——C语言基础07—指针
- C++容器
- c++ 11 多线线程系列-----thread
- c++学习log1
- 学完《软件工程(C编码实践篇)》之后的总结
- 关于C++中模板中的typename和class的区别比较
- 在Visual Studio 2013 中编写C语言、C++程序
- x的平方根(LintCode)
- C++中map容器的说明和使用技巧
- 0018C++中的vector是个什么鬼
- C++函数模板与类模板实例解析
- const 引用
- c++中实现将字符串按模式分段