C++问题 希望有高手可以指教一下
时间:2014-05-19
来源:互联网
最近岩岩dse完, 希望研究下c++, 之后学vb then Java,
我系根据http://openhome.cc/Gossip/CppGossip/ 学习, 呢个网几岩我思维,
但去到中间, 有d概念唔明, 所以希望可以放上黎, 大家讨论一下, 指教小弟
#include <iostream>
#include <vector>
using namespace std;
int main() {
int iarr[] = {30, 12, 55, 31, 98, 11, 41, 80, 66, 21};
vector<int> ivector(iarr, iarr + 10);
// 排序
sort(ivector.begin(), ivector.end());
for(vector<int>::iterator it = ivector.begin();
it != ivector.end();
it++) {
cout << *it << " ";
}
cout << endl;
cout << "输入搜寻值:";
int search = 0;
cin >> search;
vector<int>::iterator it =
find(ivector.begin(), ivector.end(), search);
if(it != ivector.end()) {
cout << "找到搜寻值!" << endl;
}
else {
cout << "找不到搜寻值!" << endl;
}
// 反转
reverse(ivector.begin(), ivector.end());
for(vector<int>::iterator it = ivector.begin();
it != ivector.end();
it++) {
cout << *it << " ";
}
cout << endl;
return 0;
}
请问
1)using namespace std;
呢旧野系讲左D咩?同Include 一个library又有咩分别?
2)vector<int> ivector(iarr, iarr + 10)
平时vecotor<int>ivector(10,5) 系指呢个vecotor有十旧野, 初始值系5, 但系(iarr, iarr + 10) 系唔系指紧佢既范围?
系既+10系唔系指去到array入面第九个物件?
3)for(vector<int>::iterator it = ivector.begin();
当中"::"系有咩意思? iterator it又系有咩用? 事关我再iterator it做一个指令, run果时run唔到
::iterator it 实际有咩用?
4)cout << *it << " "; 当中*it 同 it 有咩分别?
5)点解我cout唔到 ivector.begin()?
6) 到底Object-Oriented programming 实体系指咩? 佢系一个concept / function?
以我理解, 佢应该系一个concept, 将一旧大旧既野, 变做一小忽一小忽 同埋一个interface比呢d 一小忽一小忽插入去, 就好似apple iphone, 佢唔比你换电池, 当电池坏左就要成部手机拎番去整, 唔同samsung, 佢可以换电, 坏左电就只系整电就ok, 我理解有错吗?
新仔问题多, 希望各位多多包容

[ 本帖最后由 懒羊x 於 2014-4-22 02:50 AM 编辑 ]
作者: 懒羊x 发布时间: 2014-05-19
Hello大家好, 我岩岩学紧c++ , 之前只学过极小少javascript 伪代码 html 同少量mysql
最近岩岩dse完, 希望研究下c++, 之后学vb then Java,
我系根据http://openhome.cc/Gossip/CppGossip/ 学习, 呢个网几岩我思维, ...
1. using namespace std; 即系用std 呢个namespace
include同namespace concept 上有D唔同
include系include个file,而using namespace 系喺你一堆include左既files入面,用特定一个namespace。
4. 系呢个case, it系一个pointer,*it系个object
6.可以讲Object-Oriented programming系一个conept
佢将一组 functions(methods)同variables(attributes) group理一齐个一个object
好简单既例子系string object.string object除左嗰串字外,仲有一组 functions(methods)处理呢串字。
作者: McLoneIII 发布时间: 2014-05-19
但pointer系有咩用? 姐系好似temp咁? 一个暂存既variables?
多谢你OOP既见解, oop就姐系好似我地中学学既 f(x)咁. 一条functions, 当input x就会出y 而一个programme就由多个functions组成

作者: 懒羊x 发布时间: 2014-05-19
iterator 只是一个行为上跟pointer一样的东西
这是C++嘅特色
作者: Susan﹏汪汪 发布时间: 2014-05-19
1. 你有心学习;
2. 网上学习(尤其单一网站)只提供表面应用,并无详细讲解概念及原理。
第 1 点,㳟喜你,你有望学习成功!

第 2 点,如你一定要网上学习,咁你就要识得将你嘅问题,利用搜寻器去搵所需答案,此为不可避免。
如果你觉得麻烦,又或唔知搵乜,我强烈建议你睇书学。
图书馆内有好多学习 C++ 嘅书,新版讲 C++/11 标准都有,借嚟睇,省钱省时间。
拣书建议英文版,英文真系唔得就选中译版。千万唔好拣作者系内地或台湾人写嘅中文书,因为良莠不齐,好多作者连概念都错。
边本好?上 amazon 睇推介。
作者: fitcat07 发布时间: 2014-05-19
你有以上问题,反映:
1. 你有心学习;
2. 网上学习(尤其单一网站)只提供表面应用,并无详细讲解概念及原理。
第 1 点,㳟喜你,你有望学习成功!

第 2 点,如你一定要网上学习,咁你就要 ...
程式揭秘从c c++程式码探索电脑系统的运作原理
作者: Susan﹏汪汪 发布时间: 2014-05-19
明白....所以话include一个file, using呢个file其中一组functions, am i right?
但pointer系有咩用? 姐系好似temp咁? 一个暂存既variables?
多谢你OOP既见解, oop就姐系好似我地中学学既 f(x)咁. 一条functions, 当input x就会出y 而一个programme就由多个functions组成.
差唔多,但唔系一组functions,而系一组classes
但pointer系有咩用? 姐系好似temp咁? 一个暂存既variables?
我打个比喻,我有个10MB既文件,如果我想俾人睇及俾人修改,我下下要send个10MB文件俾人,会好浪费资源及时间。
所以我将呢个文件放系一个地方,然后只系俾个link俾人,人地可以去睇及修改,咁我唔洗下下send 10MB野俾人。
pointer就好似呢个link。
oop就姐系好似我地中学学既 f(x)咁. 一条functions, 当input x就会出y 而一个programme就由多个functions组成.
有D唔正确,数学既f(x)似functional programming,而唔系OOP。
OOP好似将一组 functions同variables 组成一个object/class。
作者: McLoneIII 发布时间: 2014-05-19
编译一个程式分为三个阶段
预处理
编译成中间码
编译成机器码
在第一阶段的预处理...所指的系macro处理
C++中所有以#开头的指令都系macro...macro并不是C++语言的一部分
只系一种"用来自动产生程式码的程式语言"...所以macro系另一套语言
例如
int main()
{
MY_INT my_var = 0;
return 0;
}
即系#define MY_INT int代表把所有之后出现MY_INT的地方都换成int
所以在编译器眼中...真正的原始码系咁
{
int my_var = 0;
return 0;
}
int main()
{
int my_var = MIN(5, 2);
return 0;
}
{
int my_var = ((5) < (2) ? (5) : (2));
return 0;
}
原理都只系咁
test.h
{
return 5;
}
int main()
{
int my_var = foo();
return 0;
}
{
return 5;
}
int main()
{
int my_var = foo();
return 0;
}
作者: Susan﹏汪汪 发布时间: 2014-05-19
namespace test
{
int foo()
{
return 0;
}
}
如果我们不预先指定使用namespace
#include "test.h"
int main()
{
int my_var = foo(); //error: foo() is not defined
return 0;
}
所以就找不到foo()这function
但如果事先指定了using namespace test
#include "test.h"
using namespace test;
int main()
{
int my_var = foo(); //ok!!!
return 0;
}
但namespace的使用并非只有这方式
可以系咁
#include "test.h"
int main()
{
int my_var = test::foo(); //直接指定使用namespace test内的foo()定义
return 0;
}
#include "test.h"
int main()
{
using namespace test; //只在main内使用namespace test
int my_var = foo();
return 0;
}
作者: Susan﹏汪汪 发布时间: 2014-05-19
macro系一把双刃刀
例如
int main()
{
int my_var = MIN(5, 2);
return 0;
}
{
int my_var = ((5) < (2) ? (5) : (2));
return 0;
}
{
int my_var = 2;
return 0;
}
而的确在大多数情况下....都会使用Macro处理一些常数
但另方面黎讲
Macro作为非C++语言的一部分(更清楚的讲法系...Macro系用来指挥编译器运作的语言)
所以使用Macro的地方都很难debug...或者不能debug
因为经过了编译时的第一阶段...
所有Macro都全部被消灭...即系话之后的debug并不包括Macro在内
结论来看....如果只系使用简单Macro...系可以在完全不影向效能的情况下...令程式码更美观看易读
但太复杂的话...除了没甚么实质作用外....还会令程式码更难找出问题
作者: Susan﹏汪汪 发布时间: 2014-05-19
int main()
{
int my_var = MIN(1, MIN(2, MIN(3, MIN(4, MIN(5, MIN(6, MIN(7, 8)))))));
return 0;
}
{
int my_var = ((1)<(((2)<(((3)<(((4)<(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))))?(4):(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))))))?(3):(((4)<(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))))?(4):(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))))))))?(2):(((3)<(((4)<(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))))?(4):(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))))))?(3):(((4)<(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))))?(4):(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))))))))))?(1):(((2)<(((3)<(((4)<(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))))?(4):(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))))))?(3):(((4)<(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))))?(4):(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))))))))?(2):(((3)<(((4)<(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))))?(4):(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))))))?(3):(((4)<(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))))?(4):(((5)<(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8)))))?(5):(((6)<(((7)<(8)?(7):(8)))?(6):(((7)<(8)?(7):(8))))))))))))));
return 0;
}
作者: Susan﹏汪汪 发布时间: 2014-05-19
#include "test.h"
int main()
{
int my_var = test::foo(); //直接指定使用namespace test内的foo()定义
return 0;
}
呢度:: 同
for(vector<int>::iterator it = ivector.begin();
既:: 系唔系一样? 姐系下面果果系指明入vector入面其中一个function - iterator , 而it就系类似foo(x)中既x?
btw, u let me know what exactly is include means thx!
作者: 懒羊x 发布时间: 2014-05-19
// test.cpp
#include "test.h"
int main()
{
int my_var = test::foo(); //直接指定使用namespace test内的foo()定义
return 0;
} test::foo();
{
template<
class T,
class Allocator = std::allocator<T>
> class vector
{
typedef /* someting here */ iterator; //这里定义一个type
iterator begin(); //这里定义一个function
}
}
就要call
std::vector<int>::iterator
如果前面已经用左using namespace std;
就可省略为vector<int>::iterator
作者: Susan﹏汪汪 发布时间: 2014-05-19

我岩岩打

#include
using namespace std;
int main()
{
int my_var = MIN(1, MIN(2, MIN(3, MIN(4, MIN(5, MIN(6, MIN(7, 8)))))));
cout << my_var;
return 0;
}
作者: 懒羊x 发布时间: 2014-05-19

我岩岩打
佢只系出1
作者: Susan﹏汪汪 发布时间: 2014-05-19
本人唔系太明点用macro 做野
例如
#define INT int
#define UINT UNSIGNED INT
int main()
{
UINT my_var = 0;
return 0;
}
{
unsigned int my_var = 0;
return 0;
}
作者: Susan﹏汪汪 发布时间: 2014-05-19
总之Macro只系做替换
例如#define UNSIGNED unsigned
#define INT int
#define UINT UNSIGNED INT
int main()
{
UINT my_var = 0;
return 0;
}会变成int main()
{
unsigned int my_var ...
姐系将几个或者一个symbol 变成1个symbol 表示
方便自己 got it! 好兴奋呀 thx


而::姐系call前面果组野入面既其中一个function
[ 本帖最后由 懒羊x 於 2014-4-22 08:58 PM 编辑 ]
作者: 懒羊x 发布时间: 2014-05-19
#include <cfloat>
#define __MERGE(_a, _b) _a##_b
#define __LOG(_b) __MERGE(log, _b)
#define __LOG_B __LOG(_DBL_RADIX)
uintmax_t __LOG_B(uintmax_t a)
{
if (a == 0) throw std::logic_error("log(0)");
double _a = (double)a;
return (uintmax_t)(((*(int64_t*)&_a) >> (DBL_MANT_DIG - 1)) - (DBL_MAX_EXP - 1));
}
{
if (a == 0) throw std::logic_error("log(0)");
double _a = (double)a;
return (uintmax_t)(((*(int64_t*)&_a) >> (53 - 1)) - (1024 - 1));
}
作者: Susan﹏汪汪 发布时间: 2014-05-19
Macro更精彩的玩法可以系咁#include
#include
#define __MERGE(_a, _b) _a##_b
#define __LOG(_b) __MERGE(log, _b)
#define __LOG_B __LOG(_DBL_RADIX)
uintmax_t __LOG_B(uintmax_t a)
{
if (a == 0) ...
另小弟想请教, 点解我call out 一个vector时
例如
作者: 懒羊x 发布时间: 2014-05-19
ok明白明白!! got it!!
姐系将几个或者一个symbol 变成1个symbol 表示
方便自己 got it! 好兴奋呀 thx


而::姐系call前面果组野入面既其中一个function
但所有C++的新手不应该咁快就接触std
因为只系C++的pointer都有排你学
作者: Susan﹏汪汪 发布时间: 2014-05-19
作者: Susan﹏汪汪 发布时间: 2014-05-19
所以楼主....你慢慢操熟左pointer先再讲std
如果可以而且唔怕我烦希望你可以留line比我 ,当有野果时请教
作者: 懒羊x 发布时间: 2014-05-19
冇问题, 因为其实我系跟个网慢慢咁学
如果可以而且唔怕我烦希望你可以留line比我 ,当有野果时请教

作者: Susan﹏汪汪 发布时间: 2014-05-19
唔好以为C++的pointer只系简单的东西
基本上....大多数没接触过pointer的程式员...不论有几资深...都会认为pointer系深奥的东西
而通常熟习pointer的程式员...已经有能力任意玩弄任何程式语言
简单黎讲...了解pointer就是要了解电脑
作者: Susan﹏汪汪 发布时间: 2014-05-19
不过楼主....
唔好以为C++的pointer只系简单的东西
基本上....大多数没接触过pointer的程式员...不论有几资深...都会认为pointer系深奥的东西
而通常熟习pointer的程式员...已经有能力任意玩弄任何程式语言
...
作者: 懒羊x 发布时间: 2014-05-19
咁其实pointer系一个concept定一个工具 or 一组function=0=?
作者: Susan﹏汪汪 发布时间: 2014-05-19
咁其实pointer系一个concept定一个工具 or 一组function=0=?
#include <cfloat>
#define __MERGE(_a, _b) _a##_b
#define __LOG(_b) __MERGE(log, _b)
#define __LOG_B __LOG(_DBL_RADIX)
uintmax_t __LOG_B(uintmax_t a)
{
if (a == 0) throw std::logic_error("log(0)");
double _a = (double)a;
return (uintmax_t)(((*(int64_t*)&_a) >> (DBL_MANT_DIG - 1)) - (DBL_MAX_EXP - 1));
}
其他的例如#include #define if果行都没有任何实际意义 (P.S. if果行只系用来debug)
所以基本上
咁写已经可以正常运作
{
double _a = (double)a;
return (uintmax_t)(((*(int64_t*)&_a) >> (53 - 1)) - (1024 - 1));
}
但如果要写得出呢几行都起码要学三五七年啦

作者: Susan﹏汪汪 发布时间: 2014-05-19
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28