C++对象数组能否被拷贝构造函数初始化

定义一个关于学生信息的类

class Student
{private:
    char *name;
    char id[3];
    int age;
    string ad;
public:

    Student(char *name="XiaoMing" , char *id = "02", int age = 20, string d = "Hunan");
    Student(const Student &other);
    ~Student();
    void name_change();
    void id_change();
    void age_change();
    void ad_change();
    void input();

    char* getid();
    void display();

};

然后写了一个该类的对象数组

Student stu[N];

有什么方法能够初始化该对象?除普通构造函数外拷贝构造函数可以吗?

c++

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++对象数组能否被拷贝构造函数初始化
定义一个关于学生信息的类 ``` class Student {private: char *name; char id[3]; int age; string ad; public: Student(char *name="XiaoMing" , char *id = "02", int age = 20, string d = "Hunan"); Student(const Student &other); ~Student(); void name_change(); void id_change(); void age_change(); void ad_change(); void input(); char* getid(); void display(); }; ``` 然后写了一个该类的对象数组 ``` Student stu[N]; ``` 有什么方法能够初始化该对象?除普通构造函数外拷贝构造函数可以吗?
C++显式调用构造函数初始化对象有用到拷贝构造函数么?
作者:大漠刀客 链接:https://www.nowcoder.com/discuss/29421 来源:牛客网 下面代码中的HasPtr hp4 = HasPtr(1,str); 这里有用到拷贝构造函数,拷贝构造函数中的语句“调用拷贝构造函数” 并没有输出。 但是将拷贝构造函数中的const去掉变成HasPtr(  HasPtr& hp)又报错了, 拷贝构造函数中的第一个参数必须是引用类型,但未必是const吧? 而且从正确使用时的输出看,这里拷贝构造函数HasPtr( const HasPtr& hp)并没有调用啊 ``` #include <iostream> #include <memory> using std::string; using std::cout; using std::endl; class HasPtr{ public: HasPtr() = default; HasPtr( int i1,string &str ){ i = i1; ps = &str; } HasPtr( const HasPtr& hp){ i = hp.i; ps = new string( *hp.ps ); cout<<"调用拷贝构造函数"<<endl; } int i; string *ps; }; int main( ){ string str = "hello"; HasPtr hp4 = HasPtr(1,str); cout<<hp4.i<<" "<<hp4.ps<<endl; return 0; } ```
编译器合成默认拷贝构造函数问题
看《深度探索C++对象模型》遇到的问题。 P49里的例子对于bitwise copy semantics展现了memberwise的拷贝,但是后面P50下面说bitwise copy semantics不需要合成拷贝构造函数。 在P52页的两个例子中,第一个说没合成,我的理解也就是没有初始化int和char\*,但之后的第二个合成了拷贝构造函数,不仅初始化了string,更初始化了int. 我又用vs测试了下,发现可以运行 ``` C++ class B { public: int cc = 10; }; int main() { B b; cout << b.cc << endl; B c = b; cout << c.cc << endl; } ```
c++ 派生类 拷贝构造函数 调用基类的构造函数
在进入派生类(derived)的拷贝构造函数之前,就已经调用了基类(based)的构造函数, 无论你有没有显示的调用。 一般派生类是这种形式: derived(const derived & d):based(d) {} 为什么使用下列形式不行 derived(const derived & d) { based::based(d); } 即在派生类构造函数内部调用基类构造函数。调试的时候发现无法访问基类的私有成员。 为什么使用初始化列表就可以访问基类的私有成员
为什么拷贝构造函数的参数类型不是引用 就会变成死循环的递归
实在不理解这个递归的过程 01.#include<iostream> 02.using namespace std; 03. 04.class CExample 05.{ 06.private: 07. int m_nTest; 08. 09.public: 10. CExample(int x) : m_nTest(x) //带参数构造函数 11. { 12. cout << "constructor with argument"<<endl; 13. } 14. 15. // 拷贝构造函数,参数中的const不是严格必须的,但引用符号是必须的 16. CExample(const CExample & ex) //拷贝构造函数 17. { 18. m_nTest = ex.m_nTest; 19. cout << "copy constructor"<<endl; 20. } 21. 22. CExample& operator = (const CExample &ex) //赋值函数(赋值运算符重载) 23. { 24. cout << "assignment operator"<<endl; 25. m_nTest = ex.m_nTest; 26. return *this; 27. } 28. 29. void myTestFunc(CExample ex) 30. { 31. } 32.}; 33. 34.int main(void) 35.{ 36. CExample aaa(2); 37. CExample bbb(3); 38. bbb = aaa; 39. CExample ccc = aaa; 40. bbb.myTestFunc(aaa); 41. 42. return 0; 43.} 输出结果: 01.constructor with argument // CExample aaa(2); 02.constructor with argument // CExample bbb(3); 03.assignment operator // bbb = aaa; 04.copy constructor // CExample ccc = aaa; 05.copy constructor // bbb.myTestFunc(aaa); ------------------------------------------------------------------ 第四个输出: copy constructor // CExample ccc = aaa 构造ccc的时候只调用一次复制构造函数从aaa那里构造出新对象了 但是放到复制构造函数参数里面如果不是引用而是用aaa传值的话 就会像下面说的 ----------------------------- 构造ccc,实质上是ccc.CExample(aaa); 我们假如拷贝构造函数参数不是引用类型的话, 那么将使得 ccc.CExample(aaa)变成aaa传值给ccc.CExample(CExample ex),即CExample ex = aaa,因为 ex 没有被初始化, 所以 CExample ex = aaa 继续调用拷贝构造函数,接下来的是构造ex,也就是 ex.CExample(aaa),必然又会有aaa传给CExample(CExample ex), 即 CExample ex = aaa;那么又会触发拷贝构造函数,就这下永远的递归下去。 ------------------------------ 这是我百度的结果很多都是这样说的但是还是理解不了 为什么2个 CExample ccc = aaa 差不多 一个是放在函数内 就无法构造对象了?而是形成递归?
关于c++中默认拷贝构造函数的理解
如题,请解释一次详细的原理 假如我定义一个类的对象a,然后在没有自己编写构造函数的情况下用语句A b=a来初始化新的对象b,会发生什么,为什么?
C++数组作为类的私有成员求助
定义一个Employee类,其中包括姓名、街道地址、城市和邮编等属性,以及changeName()和display()等函数。display()显示姓名、街道地址、城市和邮编等属性,changeName()改变对象的姓名属性。 在employee.h文件中定义Employee类。Employee类具有姓名、街道地址、城市和邮编等私有数据成员,都可以用字符型数组来表示,在成员函数中,构造函数用来初始化所有成员数组,对字符数组的赋值可以使用字符串拷贝函数strcpy(char *, char *);display()中使用cout显示姓名、街道地址、城市和邮编等属性,changeName()改变类中表示姓名属性的字符数组类型的数据成员。在主程序中定义这个类的对象并对其进行操作。 请问下构造函数如果设置了形参那要怎么实现?还有就是strcpy()函数要怎么使用啊...QAQ跪求大神指点
c++定义了一个动态数组但是报错???
总是提示访问路径出现冲突 研究了半天才知道是 数组的问题 请看到的大神 帮帮忙 谢谢 (vs平台上的) ![图片说明](https://img-ask.csdn.net/upload/201903/11/1552295783_772317.png) 代码在下面 这是头文件部分 ``` #include<iostream> using namespace std; class Array { private://私有数据成员: int *a;// 指向根据len动态申请的数组空间 int len;// 有效数组元素的个数 public://公有成员函数 : Array(int b[], int length);// 构造函数, 使用数组b初始化a所指的动态数组, length初始化len Array(const Array &arr);// 拷贝构造函数,使用对象arr初始化新对象 void sort();// 按题意对动态数组中的元素进行排序 void print();// 输出a所指向的数组 ~Array();// 析构函数, 释放动态数组空间 }; ``` 这是成员函数部分 ``` #include"array.h" using namespace std; Array::Array(int b[], int length)// 构造函数, 使用数组b初始化a所指的动态数组, length初始化len { int i; int *a = new int[length]; len = length; for (i = 0; i<len; i++) { a[i]= b[i]; } } Array::Array(const Array &arr)// 拷贝构造函数,使用对象arr初始化新对象 { int i; len = arr.len; int *a=new int[len]; for (i = 0; i < len; i++) { a[i] = arr.a[i]; } } void Array::sort()// 按题意对动态数组中的元素进行排序 { int i,j; int temp; for(i=0;i<len;i++) { for(j=i+1;j<len;j++) { if(a[i]<a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } } } } void Array::print()// 输出a所指向的数组 { int i; for(i=0;i<len;i++) { cout<<a[i]<<endl; } } Array::~Array()// 析构函数, 释放动态数组空间 { delete []a; } ``` 这是主函数 ``` #include"array.h" using namespace std; int main() { int num; int i; int a[50]; cout<<"输入数组的元素个数"<<endl; cin>>num; for(i=0;i<num;i++) { cin>>a[i]; } Array text(a,num); text.sort(); text.print (); system("pause"); return 0; } ```
c++技术帮,给个程序的思路
编写一个实现n维向量各种操作的类(Vector),功能包括: 1. 构造函数实现n维向量的初始化构造,这里n可变; 2. 析构函数实现向量动态内存的释放; 3. 拷贝构造函数和移动拷贝构造函数实现向量的拷贝构造; 4. 重载赋值运算符('=')和移动赋值运算符,实现两个向量之间的赋值; 5. 编写成员函数求两个向量的内积; 6. 编写成员函数求两个向量的外积; 7. 编写成员函数求两个向量的和; 8. 编写成员函数求两个向量的差; 9. 编写成员函数实现向量单位化; 10. 编写一个主函数测试向量类的上述功能。 在向量类的基础上,编写矩阵类(Matrix),功能包括:实现矩阵的一些常用运算:取一行、子块、求行列式值(detMatrix)、数乘(ScalarMult);还对矩阵运算的操作符进行了重载:+(operator+)、-(operator-)等。并用主函数测试该矩阵类。 Matrix operator[](int); //取某行,对操作符[]重载 Matrix operator()(int, int, int, int); //取子块,对操作符()重载
帮忙看看这个程序出了什么问题
本菜写了一个小程序 能够创建一个矩阵,规定长宽,并进行矩阵之间的加减运算 代码如下 ``` #include<iostream> using namespace std; class matrix //创建矩阵类 { private: int lines; int rows; int **num; //建立二重数组 public: matrix(int a,int b) //构造函数 { lines=a; rows=b; cout<<"矩阵初始化"<<endl; num=new int*[lines]; int x,y; for(y=0;y<lines;y++) { num[y]=new int[rows]; //循环完成new申请内存 } } /*matrix(matrix& father) //拷贝构造函数 { cout<<"调用拷贝构造函数"<<endl; lines=father.lines; rows=father.rows; int x,y; for(y=0;y<lines;y++) { for(x=0;x<rows;x++) { num[x][y]=father.num[x][y]; //循环读入矩阵元素 } } }*/ void in(); //输入函数 void out(); //输出函数 int get_num(int x,int y) //取用指定元素的函数(内联) { return num[x][y]; } void operate(int mode,matrix m1,matrix m2); //运算函数,包含加和减 ~matrix() //析构函数 释放矩阵空间 { } void matrix_free(); //释放矩阵空间函数 }; void matrix::matrix_free() { int i; for(i=0;i<lines;i++) { delete []num[i]; } delete []num; } void matrix::in() { cout<<"请按顺序输入矩阵元素:"<<endl; int x,y; for(y=0;y<lines;y++) { for(x=0;x<rows;x++) { cin>>num[x][y]; //循环输入矩阵元素 } } } void matrix::out() //此函数可以按格式输出矩阵 { int x,y; for(y=0;y<lines;y++) { for(x=0;x<rows;x++) { cout<<num[x][y]; if(x!=rows-1) { cout<<" "; } } cout<<endl; } } void matrix::operate(int mode,matrix m1,matrix m2) //运算函数,mode=1代表加,mode=-1代表减,m1,m2为待处理矩阵 { int x,y; for(y=0;y<lines;y++) { for(x=0;x<rows;x++) { num[x][y]=m1.get_num(x,y)+mode*m2.get_num(x,y); //运算部分 } } } int main(void) { int a=0,b=0; cout<<"输入矩阵大小(行 列):"<<endl; while(a<=0||b<=0) { cin>>a>>b; if(a<=0||b<=0) { cout<<"输入错误,重新输入:"<<endl; } } matrix A1(a,b),A2(a,b),A3(a,b); //创建三个矩阵 A1.in(); //输入初始化 A2.in(); A3.operate(1,A1,A2); //A3=A1+A2 cout<<"矩阵和:"<<endl; A3.out(); //输出 A3.operate(-1,A1,A2); //A3=A1-A2 cout<<"矩阵差:"<<endl; A3.out(); //输出 A1.matrix_free(); //释放矩阵空间 A2.matrix_free(); A3.matrix_free(); } ``` 此程序目前问题有三个 1.拷贝构造函数出错,只能注释掉,否则输入完两个矩阵后回车程序未响应 2.释放矩阵空间的不能写在析构函数里,否则输出结果不正确(A3=A1-A2的最后一行) 3.输入矩阵的列不能大于行,否则输入完第一行数字并回车后程序未响应 请前辈指导,谢谢
C++ primer 里面STL容器set的insert操作问题。。。
在C++primer 5th 的13.4节里面有个类的定义是这样的: class Message { friend void swap(Message&, Message&); friend class Folder; public: //folders被隐式初始化为空集合 explicit Message(const string &str=""):contents(str){} //拷贝控制成员,用来管理指向本Message的指针 Message(const Message&); //拷贝构造函数 Message& operator=(const Message&); //拷贝赋值运算符 ~Message(); //析构函数 //从给定的Folder中添加/删除本Message void save(Folder&); void remove(Folder&); //显示有几个Message对象 void show(); private: string contents; //实际消息文本 set<Folder*> folders; //包含本Message的folder //拷贝构造函数,拷贝赋值运算符合析构函数所使用的工具函数 //将本message添加到指向参数的folder中 void add_to_Folders(const Message&); //从folders中的每个Folder中删除本Message void remove_from_Folders(); //向folders添加和删除 void addFldr(Folder *f){folders.insert(f);} void remFldr(Folder *f){folders.erase(f);} }; 其中的成员函数 void save(Folder&);定义为: void Message::save(Folder &f) { folders.insert(&f); //将给定Folder添加到我们的Folder列表中 f.addMsg(this); //将本Message添加到f的Message中 } 请教下大神,folders不是set< Folder的指针> 类型么,为什么在函数里面folders可以insert像Folder& 的类型(不是应该insert像 Folder的指针的类型)?
C++初学者上机的一个实验题,不出结果,大神们指教一下(VC++6.0编译器)
/*依据下面的描述定义并实现一个向量类Vector,并在main函数中定义所需要的对象验证所实现代码的正确性 1) 私有数据成员int dimension; double* data; 表示向量的维数与向量元素存储空间的首地址 2) 无参构造函数,实现把向量所有元素初始化为0 3) 有参构造函数,实现用一个n维数组初始化n维向量 4) 拷贝构造函数 5) 析构函数 6) 输出数据成员函数 void display( ); 7) 成员函数int GetDimension();获取向量对象的维数 8) 成员函数 double SetAt(double newdata,int index);实现给向量的第index+1个元素赋值 9) 成员函数 double GetAt(int index);实现读取向量的第index+1个元素的值 10)实现向量加、减、乘运算的成员函数 Vector Add(const Vector &ob2 ); Vector Sub(const Vector &ob2 ); int Mult(const Vector &ob2 ); */ #include <iostream.h> class Vector { private: int dimension; double* data; public: Vector(); Vector(int a[]); Vector(const Vector &v); ~Vector(); void Display(); int GetDimension(); double SetAt(double newdata,int index); double GetAt(int index); Vector Add(const Vector &ob2 ); Vector Sub(const Vector &ob2 ); int Mult(const Vector &ob2 ); }; Vector::Vector()//无参构造函数,实现把向量所有元素初始化为0 { dimension=4; for(int i=0;i<4;i++) data[i]=0; } Vector::Vector(int a[])//有参构造函数,实现用一个n维数组初始化n维向量 { dimension=sizeof(a); int i; for(i=0;i<dimension;i++) data[i]=a[i]; } Vector::Vector(const Vector &v)//拷贝构造函数 { dimension=v.dimension; for(int i=0;i<v.dimension;i++) data[i]=v.data[i]; } Vector::~Vector()//析构函数 {} void Vector::Display()//输出数据成员函数 { cout<<'('; for(int i=0;i<dimension;i++) cout<<data[i]<<','; cout<<')'; } int Vector::GetDimension()//获取向量对象的维数 { return sizeof(data); } double Vector::SetAt(double newdata,int index)//实现给向量的第index+1个元素赋值 { data[index]=newdata; return 0; } double Vector::GetAt(int index)//实现读取向量的第index+1个元素的值 { return data[index]; } Vector Vector::Add(const Vector &ob2)//实现向量加、减、乘运算的成员函数 { Vector temp; temp.dimension=dimension; for(int i;i<dimension;i++) temp.data[i]=data[i]+ob2.data[i]; return temp; } Vector Vector::Sub(const Vector &ob2) { Vector temp; temp.dimension=dimension; for(int i;i<dimension;i++) temp.data[i]=data[i]-ob2.data[i]; return temp; } int Vector::Mult(const Vector &ob2) { int i; double sum=0; for(i=0;i<dimension;i++) sum+=data[i]*ob2.data[i]; return int(sum); } int main() { Vector v1; double data=0; int a[4]={1,2,3,4}; Vector v2(a); Vector v3(v2); Vector v4,v5; cout<<"lv1:"<<v1.GetDimension()<<endl; v1.Display(); cout<<"lv2:"<<v2.GetDimension()<<endl; v2.Display(); cout<<"lv3:"<<v3.GetDimension()<<endl; v3.Display(); v1.SetAt(3,2); v1.Display(); cout<<v1.GetAt(2)<<endl; v1.Display(); v4=v1.Add(v2); cout<<"v1+v2="<<endl; v4.Display(); v5=v1.Sub(v2); cout<<"v1-v2="<<endl; v5.Display(); int sum; sum=v1.Mult(v2); cout<<"v1*v2="<<sum; return 0; }
C++中的debug error问题 困扰我两天了 大神快来
#include<iostream> #ifndef STRINGBAD_H_ #define STRINGBAD_H_ class StringBad { private: char * str; int len; static int num_strings; //不能在类声明中初始静态成员变量 这是因为声明描述如何分配内存 但并不分配内存 public: StringBad(const StringBad & st); //复制构造函数 StringBad(const char * s); //显示构造函数 StringBad(); //默认构造函数 ~StringBad(); //析构函数 friend std::ostream & operator<<(std::ostream & os, const StringBad & st); //友元函数 重载<<运算符 StringBad & operator=(const StringBad & st); //重载赋值运算符 }; #endif #include<string.h> #include"stringbad.h" using std::cout; using std::endl; int StringBad::num_strings = 0; //初始化类静态成员 静态类成员可以在类声明之外只用单独语句进行初始化 StringBad::StringBad(const StringBad & st) //赋值构造函数 进行深度复制 { num_strings++; //更新静态成员 const int b=len = st.len; //复制私有整型成员 str = new char[len + 1]; //把指针指向创建的新地址 strcpy_s(str, strlen(st.str)+1, st.str); //然后将字符串副本复制到新地址 cout << num_strings << ": \"" << str << "\" object created\n"; cout << &str << endl; } //浅复制导致的结果是把指针(指向同一内存字符串的地址)复制过去 当析构函数调用的时候将释放同一字符串 引起非常严重的后果 //所以 可能会被析构两次 应当使用上述的深度复制 而不是系统默认的 StringBad::StringBad(const char * s) { len = std::strlen(s); //检测计算字符串长度 但不包括末尾的空字符 并对len成员进行初始化 str = new char[len + 1]; //创建动态类成员 使用new分配足够的空间保存字符串 然后将新地址赋给str成员 strcpy_s(str, strlen(s) + 1, s); //复制字符串 将第二个字符串拷贝到第一个字符串的位置 num_strings++; cout << num_strings << ": \"" << str << "\" object created\n"; cout << &str << endl; } StringBad::StringBad() { len = 4; str = new char[4]; strcpy_s(str, 4, "C++"); num_strings++; cout << num_strings << ": \"" << str << "\" default object created\n"; cout << &str << endl; } StringBad::~StringBad() { cout << "\"" << str << "\" object deleted, "; --num_strings; cout << num_strings << " left\n"; delete[]str; cout << str << endl; } std::ostream & operator<<(std::ostream & os, const StringBad & st) { os << st.str; return os; } StringBad & StringBad::operator=(const StringBad & st) { if (this == &st) //检测是否自我复制 return *this; //是的话返回并结束 delete[]str; //否则释放str 释放目前占用的内存 因为 指针会等系会指向新内存 所以这段会被浪费掉 len = st.len; //赋值私有成员 无影响 str = new char[len + 1]; //创建新内存 并把新内存地址赋给指针str 因为之前的指向的旧地址已经被释放了 所以节省了内存 strcpy_s(str, strlen(st.str) + 1, st.str); //赋值字符串到新内存当中 return *this; //并返回对象 } #include<iostream> using std::cout; #include"stringbad.h" void callme1(StringBad &); void callme2(StringBad); int main() { using std::endl; { cout << "Starting an inner block.\n"; // StringBad headline1("Celery Stalks at Midnight"); // StringBad headline2("Lettuce Prey"); StringBad sports("Spinach Leaves Bowl for Dollars"); cout << "headline1: " << headline1 << endl; cout << "headline2: " << headline2 << endl; cout << "sports: " << sports << endl; callme1(headline1); cout << "headline1: " << headline1 << endl; callme2(headline2); cout << "headline2: " << headline2 << endl; cout << "Initialize one object to another:\n"; StringBad sailor = sports; cout << "sailor: " << sailor << endl; cout << "Assign one object to another:\n"; StringBad knot; knot = headline1; cout << "knot: " << knot << endl; cout << "Exiting the block.\n"; } cout << "End of main()\n"; return 0; } void callme1(StringBad & rsb) { cout << "String passed by reference:\n"; cout << " \"" << rsb << "\"\n"; } void callme2(StringBad sb) { cout << "String passwd by value:\n"; cout << " \"" << sb << "\"\n"; }![图片说明](https://img-ask.csdn.net/upload/201709/27/1506521094_491397.png)
这段代码有两三个错误 代码是基础的c++ 运行环境为CB或者devc++麻烦帮我改一下~
#include<iostream> #include <string> #include <memory.h> using namespace std; class Set { int maxsize;//集合的当前最大容量 int count;//集合的当前元素个数 int *elem; public: //Set(int initsize=10);//构造函数,创建一个空集,initsize: 集合的初始容量 Set(const Set &s);//拷贝构造函数 Set();//析构函数 int Add(int a[], int len);//增加一组新元素,返回值为新增加的元素个数 int Add(int e);//增加一个新元素,返回值为新增加的元素个数 bool Contains(int e) const;//检查当前集合中是否已包含元素 e Set Intersect(const Set& s) const;//求与另一集合的交集 Set Union(const Set& s) const;//求与另一集合的并集 int GetCount() const;//获取当前集合中的元素个数 void Print() const;};//打印所有元素 };//注:const 表示该函数不会对当前对象的数据成员做出修改 int main() { int a[]={1,3,5,7,9}, b[]={2,4,6,8,10,3, 5}; Set s1, s2; s1.Add(a, 5); s2.Add(b, 7); Set s3 = s1.Intersect(s2); Set s4 = s1.Union(s2); s3.Print(); s4.Print(); } void Set::Print()const { for (int i = 0; i < count; i++) cout << elem[i] << " "; cout << endl; } Set Set::Union(const Set& s) const { Set r(s); //用 s 来初始化新集合 r.Add(elem, count); //再添加入当前集合中包含的内容 return r; } inline int Set::GetCount() const { return count; } Set Set::Intersect(const Set& s) const { //int Set::count; Set r(s.count + this->count); for (int i = 0; i < s.count; i++) { if (Contains(s.elem[i])) r.Add(s.elem[i]); //两个集合中都有的元素,加入到交集中。 } return r; } Set::Set(const Set& s) { maxsize = s.maxsize; count = s.count; elem = new int[maxsize]; //为新元素分配空间 memcpy(elem, s.elem, sizeof(int)*count); //复制所有元素 } Set::Set() { delete[] elem; //释放占用空间 } Set::Set(int initsize) :maxsize(initsize), count(0) { elem = new int [maxsize]; if (!elem) throw "申请集合空间失败!"; } int Set::Add(int a[], int len) { int c = 0; //用于记录新增加的元素个数 for (int i = 0; i < len; i++) c+= Add(a[i]); return c; } int Set::Add(int e) { if (Contains(e)) return 0; //当前集合中已包含了指定元素,不用添加了。 if (count == maxsize) //空间已满,再增加空间 { int *tmp = new int[maxsize+10]; if (!tmp) return 0; //申请新空间失败,退出 memcpy(tmp, elem, count*sizeof(int)); //将原来的内容复制到新空间中 maxsize += 10; //最大容量增长10个数据单位 delete[] elem; //删除原有空间 elem = tmp; } elem[count++] = e; //将新元素存放在数组的最后 return 1; } bool Set::Contains(int e) const { for (int i = 0; i < count; i++) if (elem[i] == e) return true; return false;}
Creat函数为什么会错呢?
循环链表ADT模板简单应用算法设计:约瑟夫环 作者: 冯向阳时间限制: 1S章节: DS:线性表 问题描述 : 目的:使用C++模板设计循环链表的抽象数据类型(ADT)。并在此基础上,使用循环链表ADT的基本操作,设计并实现单链表的简单算法设计。 内容:(1)请使用模板设计循环链表的抽象数据类型。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。参考网盘中的单链表ADT原型文件,自行设计循环链表的ADT。) (2)ADT的简单应用:使用该ADT设计并实现循环链表应用场合的一些简单算法设计。 应用2:编号为1,2,...,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。现在给定一个随机数m>0,从编号为1的人开始,按顺时针方向1开始顺序报数,报到m时停止。报m的人出圈,同时留下他的密码作为新的m值,从他在顺时针方向上的下一个人开始,重新从1开始报数,如此下去,直至所有的人全部出列为止。请在使用循环链表ADT的基础上,设计一个算法求出圈的顺序(以编号表示)。限定人数至少为1. 参考函数原型: template<class ElemType> void Joseph(CirLinkList<ElemType> &A, int m); //约瑟夫环专用结点类型 struct node{ int number; int code; }; 输入说明 : 第一行:人数n 第二行:第一个人所持的密码 第三行:第二个人所持的密码 ... 第n+1行:第n个人所持的密码 第n+2行:给定的随机数m 输出说明 : 第一行至第n行:建立的循环链表的遍历结果(一个结点占据1行) 第n+1行:空行 第n+2行:出圈的顺序(编号与编号之间以“->”分隔) #include <iostream> #include<stdio.h> #include<stdlib.h> using namespace std; /* 循环单链表的结点定义 */ template<class ElemType> struct LinkNode { ElemType data; int node; LinkNode<ElemType> *next; //构造函数1,用于构造头结点 LinkNode(LinkNode<ElemType> *ptr = NULL) { next = ptr; } //构造函数2,用于构造其他结点 //函数参数表中的形参允许有默认值,但是带默认值的参数需要放后面 LinkNode(const ElemType &item,const ElemType &itam, LinkNode<ElemType> *ptr = NULL) { next = ptr; data = item; node=itam; } //取得结点的数据域的值 ElemType getData(){ return data; } //修改结点的next域 void SetLink( LinkNode<ElemType> *link ){ next = link; } //修改结点的data域 void SetLink( ElemType value ){ data = value; } }; //带头结点的循环单链表 template<class ElemType> class CirLinkList { private: LinkNode<ElemType> *head; // 头结点 LinkNode<ElemType> *tail; // 尾结点 public: //无参数的构造函数 CirLinkList(){head = new LinkNode<ElemType>; tail = head; head->next = head;} //带参数的构造函数 CirLinkList(const ElemType &item){head = new LinkNode<ElemType>(item); tail = head; head->next = head;} //拷贝构造函数 CirLinkList(CirLinkList<ElemType> &List); //析构函数 //~CirLinkList(){ListDestroy();} //销毁链表 void ListDestroy(); //清空链表 void ListClear(); //返回链表的长度 int ListLength() { if(head->next==head) return 0; else {LinkNode<ElemType> *p; int i=1; p=head->next; while(p->next!=head->next) { p=p->next; i++; } return i;} } //判断链表是否为空表 bool ListEmpty() { if(head->next==head) return true; else return false; } //获取循环链表头结点 LinkNode<ElemType>* GetHead() { return head;} //获取循环链表尾结点 LinkNode<ElemType>* GetTail() { return tail;} //设置链表头结点 void SetHead(LinkNode<ElemType> *p){ head = p;} //在链表的第pos个位置之后插入e元素 void ListInsert_next(int pos,ElemType e) { int j; LinkNode<ElemType> *p,*s,*r; s=(LinkNode<ElemType>*)malloc(sizeof(ElemType)); p=head->next; j=1; while(j<pos&&p) { p=p->next; j++; } r=p; s->data=e; p->next=s; s->next=r->next; } //表头插入法动态生成链表 void CreateList_Head(int n) { ElemType w; LinkNode <ElemType> *h; LinkNode <ElemType> *o; h=head; for(int i=n;i>0;i--) { o=(LinkNode<ElemType>*)malloc(sizeof(ElemType)); cin>>w; o->data=w; o->node=n-i+1; h->next=o; tail=o; tail->next=head->next; h=tail; } } //表尾插入法动态生成链表 //void CreateList_Tail(int n, ElemType *A); //遍历链表 void ListTraverse() { LinkNode<ElemType> *p=head->next; while(p->next!=head->next) { cout<<p->node<<" "<<p->data<<endl; p=p->next; } cout<<p->node<<" "<<p->data<<endl; cout<<endl; return ; } void Joseph(int m,int cd) { int j=1,i; LinkNode<ElemType> *p,*s; p=head->next; s=p; for(i=1;i<cd;i++) { while(j!=m) { s=p; p=p->next; j++;} s->next=p->next; m=p->data; cout<<p->node<<"->"; p=s->next; j=1; } cout<<p->node; cout<<endl; } }; int main() { CirLinkList<int> d; int cd; cin>>cd; d.CreateList_Head(cd); int m; cin>>m; d.ListTraverse(); d.Joseph(m,cd); return 0; } 所设链表为带头指针的循环链表 即头指针指向第一个元素,尾指针也指向第一个元素 但在初始化时 头指针和尾指针相等。
代码运行有问题怎么解决
#include <iostream> #include <string> #include <queue> #include <map> using namespace std; /** * @brief 哈弗曼结点 * 记录了哈弗曼树结点的数据、权重及左右儿子 */ struct HTNode { char data; HTNode *lc, *rc; int w; /** 节点构造函数 */ HTNode(char _d, int _w, HTNode *_l = NULL, HTNode *_r = NULL) { data = _d; w = _w; lc = _l; rc = _r; } /** 节点拷贝构造函数 */ HTNode(const HTNode &h) { data = h.data; lc = h.lc; rc = h.rc; w = h.w; } /** 用于优先队列比较的运算符重载 */ friend bool operator < (const HTNode &a, const HTNode &b) { return a.w > b.w; } }; /** 哈弗曼树叶子节点数、各叶子结点数据及权重 */ /** 权值从Lolita小说中抽样取出 */ const char ch[] = { 10, 32, 33, 37, 40, 41, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 63, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 93, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 161, 164, 166, 168, 170, 173, 174, 175, 176, 177, 180, 186, 255, '\r', '\0' }; const int fnum[] = { 2970, 99537, 265, 1, 496, 494, 9032, 1185, 5064, 108, 180, 132, 99, 105, 82, 64, 62, 77, 126, 296, 556, 548, 818, 443, 543, 435, 225, 271, 260, 797, 3487, 158, 50, 1053, 589, 498, 332, 316, 61, 276, 724, 855, 54, 293, 543, 11, 185, 11, 25, 26, 42416, 7856, 12699, 23670, 61127, 10229, 10651, 27912, 32809, 510, 4475, 23812, 13993, 34096, 38387, 9619, 500, 30592, 30504, 42377, 14571, 4790, 11114, 769, 10394, 611, 1, 4397, 12, 71, 117, 1234, 81, 5, 852, 1116, 1109, 1, 3, 1, 2970 }; const int n = 91; /** 优先队列 */ priority_queue<HTNode> pq; /** 哈弗曼编码映射 */ map<string, char> dcode; map<char, string> ecode; /** 根节点以及总权重+边长 */ HTNode *root; int sum = 0; /** 初始化叶节点,并加入到优先队列中 */ void Init() { for(int i = 0; i < n; i++) { HTNode p(ch[i], fnum[i]); pq.push(p); } } /** 建立哈夫曼树 */ void CreateHT() { HTNode *lmin, *rmin; /** 当队列中不止一个元素时 */ while(!pq.empty() && 1 != pq.size()) { /** 取队首两个元素(权值最小) */ lmin = new HTNode(pq.top()); pq.pop(); rmin = new HTNode(pq.top()); pq.pop(); /** 合并元素重新入队 */ HTNode p(0, lmin->w + rmin->w, lmin, rmin); pq.push(p); } if(!pq.empty()) { /** 根节点 */ root = new HTNode(pq.top()); pq.pop(); } } /** 创建哈夫曼编码 */ void CreateHTCode(HTNode *p, string str) { if(!p) return; if(0 != p->data) { /** 若是叶节点,则记录此节点的编码值 */ dcode[str] = p->data; ecode[p->data] = str; sum += (str.length() * p->w); return; } CreateHTCode(p->lc, str + "0"); CreateHTCode(p->rc, str + "1"); } /** 显示哈夫曼编码 */ void DispCode() { printf("输出哈弗曼编码:\n"); for(int i = 0; i < n; i++) { printf("\t'%c':\t%s\n", ch[i], ecode[ch[i]].c_str()); } printf("平均长度:%.5lf\n", double(sum) / double(root->w)); } /** 释放哈夫曼树 */ void Release(HTNode *p) { if(!p) return; Release(p->lc); Release(p->rc); delete p; } /** 输出压缩文 */ void putEncode(FILE *fp, char *buf) { unsigned char code = 0; for(int i = 0; i < 8; i++) code = (code << 1) + (buf[i] - '0'); fwrite(&code, sizeof(unsigned char), 1, fp); } /** 判断是否在字符串内 */ bool instr(char c, const char str[]) { for(int i = 0; i < strlen(str); i++) if(c == str[i]) return true; return false; } /** 压缩文件 */ void Encode() { FILE *OF; FILE *IF; char ifn[255]; const char ofn[] = "Encode.txt"; char buf[9]; int cnt = 0, newcnt = 0; printf("Input the filename: "); scanf("%s", ifn); IF = fopen(ifn, "rb"); if(!IF) { printf("Wrong file.\n"); return; } OF = fopen(ofn, "wb+"); if(!OF) { printf("Wrong file.\n"); } /** 开始读文件 */ memset(buf, 0, sizeof(buf)); while(!feof(IF)) { unsigned char c; fread(&c, sizeof(unsigned char), 1, IF); if(instr(c, ch)); else c = ' '; for(int i = 0; i < ecode[c].length(); i++) { buf[strlen(buf)] = ecode[c][i]; if(8 == strlen(buf)) { newcnt++; putEncode(OF, buf); memset(buf, 0, sizeof(buf)); } } cnt++; } cnt--; if(0 != strlen(buf)) { for(int i = strlen(buf); i < 8; i++) buf[i] = '0'; putEncode(OF, buf); } fwrite(&cnt, 4, 1, OF); fclose(IF); fclose(OF); printf("压缩成功!压缩率:%.2f%c\n", (((double)newcnt + 4.0f) / (double)cnt) * 100, '%'); } /** 补0 */ void putZeros(char *buf) { char tmpbuf[9]; memset(tmpbuf, 0, sizeof(tmpbuf)); if(8 != strlen(buf)) { for(int i = 0; i < 8 - strlen(buf); i++) tmpbuf[i] = '0'; strcat(tmpbuf, buf); strcpy(buf, tmpbuf); } } /** 解压缩 */ void Decode() { char buf[256]; char oldbuf[9]; const char ifn[] = "Encode.txt"; const char ofn[] = "Decode.txt"; FILE *IF = fopen(ifn, "rb"); if(!IF) { printf("Wrong file.\n"); return; } FILE *OF = fopen(ofn, "wb+"); if(!OF) { printf("Wrong file.\n"); return; } int tot, cnt = 0; fseek(IF, -4L, SEEK_END); fread(&tot, 4, 1, IF); fseek(IF, 0L, SEEK_SET); memset(buf, 0, sizeof(buf)); while(true) { if(cnt == tot) break; unsigned char c; fread(&c, sizeof(unsigned char), 1, IF); itoa(c, oldbuf, 2); putZeros(oldbuf); for(int i = 0; i < 8; i++) { if(cnt == tot) break; buf[strlen(buf)] = oldbuf[i]; if(dcode.end() != dcode.find(string(buf))) { fwrite(&dcode[string(buf)], sizeof(char), 1, OF); memset(buf, 0, sizeof(buf)); cnt++; } } } fclose(IF); fclose(OF); printf("解压成功!文件名Decode.txt。\n"); } int main() { Init(); CreateHT(); CreateHTCode(root, ""); DispCode(); Encode(); Decode(); Release(root); system("pause"); return 0; }
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Linux(服务器编程):15---两种高效的事件处理模式(reactor模式、proactor模式)
前言 同步I/O模型通常用于实现Reactor模式 异步I/O模型则用于实现Proactor模式 最后我们会使用同步I/O方式模拟出Proactor模式 一、Reactor模式 Reactor模式特点 它要求主线程(I/O处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将时间通知工作线程(逻辑单元)。除此之外,主线程不做任何其他实质性的工作 读写数据,接受新的连接,以及处...
阿里面试官问我:如何设计秒杀系统?我的回答让他比起大拇指
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸,打败了...
五年程序员记流水账式的自白。
不知觉已中码龄已突破五年,一路走来从起初铁憨憨到现在的十九线程序员,一路成长,虽然不能成为高工,但是也能挡下一面,从15年很火的android开始入坑,走过java、.Net、QT,目前仍处于android和.net交替开发中。 毕业到现在一共就职过两家公司,目前是第二家,公司算是半个创业公司,所以基本上都会身兼多职。比如不光要写代码,还要写软著、软著评测、线上线下客户对接需求收集...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n
一文详尽系列之模型评估指标
点击上方“Datawhale”,选择“星标”公众号第一时间获取价值内容在机器学习领域通常会根据实际的业务场景拟定相应的不同的业务指标,针对不同机器学习问题如回归、分类、排...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯
程序员该看的几部电影
##1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?
Python绘图,圣诞树,花,爱心 | Turtle篇
每周每日,分享Python实战代码,入门资料,进阶资料,基础语法,爬虫,数据分析,web网站,机器学习,深度学习等等。 公众号回复【进群】沟通交流吧,QQ扫码进群学习吧 微信群 QQ群 1.画圣诞树 import turtle screen = turtle.Screen() screen.setup(800,600) circle = turtle.Turtle()...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
还记得那个提速8倍的IDEA插件吗?VS Code版本也发布啦!!
去年,阿里云发布了本地 IDE 插件 Cloud Toolkit,仅 IntelliJ IDEA 一个平台,就有 15 万以上的开发者进行了下载,体验了一键部署带来的开发便利。时隔一年的今天,阿里云正式发布了 Visual Studio Code 版本,全面覆盖前端开发者,帮助前端实现一键打包部署,让开发提速 8 倍。 VSCode 版本的插件,目前能做到什么? 安装插件之后,开发者可以立即体验...
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布了 2019年国民经济报告 ,报告中指出:年末中国大陆总人口(包括31个
2019年除夕夜的有感而发
天气:小雨(加小雪) 温度:3摄氏度 空气:严重污染(399) 风向:北风 风力:微风 现在是除夕夜晚上十点钟,再有两个小时就要新的一年了; 首先要说的是我没患病,至少现在是没有患病;但是心情确像患了病一样沉重; 现在这个时刻应该大部分家庭都在看春晚吧,或许一家人团团圆圆的坐在一起,或许因为某些特殊原因而不能团圆;但不管是身在何处,身处什么境地,我都想对每一个人说一句:新年快乐! 不知道csdn这...
听说想当黑客的都玩过这个Monyer游戏(1~14攻略)
第零关 进入传送门开始第0关(游戏链接) 请点击链接进入第1关: 连接在左边→ ←连接在右边 看不到啊。。。。(只能看到一堆大佬做完的留名,也能看到菜鸡的我,在后面~~) 直接fn+f12吧 &lt;span&gt;连接在左边→&lt;/span&gt; &lt;a href="first.php"&gt;&lt;/a&gt; &lt;span&gt;←连接在右边&lt;/span&gt; o...
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
2020年的1月,我辞掉了我的第一份工作
其实,这篇文章,我应该早点写的,毕竟现在已经2月份了。不过一些其它原因,或者是我的惰性、还有一些迷茫的念头,让自己迟迟没有试着写一点东西,记录下,或者说是总结下自己前3年的工作上的经历、学习的过程。 我自己知道的,在写自己的博客方面,我的文笔很一般,非技术类的文章不想去写;另外我又是一个还比较热衷于技术的人,而平常复杂一点的东西,如果想写文章写的清楚点,是需要足够...
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
节后首个工作日,企业们集体开晨会让钉钉挂了
By 超神经场景描述:昨天 2 月 3 日,是大部分城市号召远程工作的第一天,全国有接近 2 亿人在家开始远程办公,钉钉上也有超过 1000 万家企业活跃起来。关键词:十一出行 人脸...
Java基础知识点梳理
Java基础知识点梳理 摘要: 虽然已经在实际工作中经常与java打交道,但是一直没系统地对java这门语言进行梳理和总结,掌握的知识也比较零散。恰好利用这段时间重新认识下java,并对一些常见的语法和知识点做个总结与回顾,一方面为了加深印象,方便后面查阅,一方面为了学好java打下基础。 Java简介 java语言于1995年正式推出,最开始被命名为Oak语言,由James Gosling(詹姆
2020年全新Java学习路线图,含配套视频,学完即为中级Java程序员!!
新的一年来临,突如其来的疫情打破了平静的生活! 在家的你是否很无聊,如果无聊就来学习吧! 世上只有一种投资只赚不赔,那就是学习!!! 传智播客于2020年升级了Java学习线路图,硬核升级,免费放送! 学完你就是中级程序员,能更快一步找到工作! 一、Java基础 JavaSE基础是Java中级程序员的起点,是帮助你从小白到懂得编程的必经之路。 在Java基础板块中有6个子模块的学
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名...
【CSDN学院出品】 你不可不知的JS面试题(分期更新……)
1、JS中有哪些内置类型? 7种。分别是boolean、number、string、object、undefined、null、symbol。 2、NaN是独立的一种类型吗? 不是。NaN是number类型。 3、如何判断是哪个类型? Object.prototype.toString.call(),返回为[object Type]。 现在我们来验证一下。 Object.prototype.toS...
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计...
相关热词 c# 为空 判断 委托 c#记事本颜色 c# 系统默认声音 js中调用c#方法参数 c#引入dll文件报错 c#根据名称实例化 c#从邮件服务器获取邮件 c# 保存文件夹 c#代码打包引用 c# 压缩效率
立即提问