本博客知识记录自己学习中的笔记或者记录,如果有错误欢迎大家纠正。
转载声明出处
练习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对象拷贝给一个整形数组。
在上面代码中已经实现。