主要参考菜鸟教程,用于回忆当时没有好好学习的C++98
Vector的学习
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> myVector;
myVector.push_back(3);
myVector.push_back(7);
myVector.push_back(11);
myVector.push_back(5);
cout << "Elements in the vector: ";
for (int element : myVector) {
cout << element << " ";
}
cout << endl;
cout << "First Element: " << myVector[0] << endl;
cout << "Second Element: " << myVector.at(1) << endl;
cout << "Size of vector: " << myVector.size() << endl;
myVector.erase(myVector.begin() + 2);
cout << "Elements in the vector after erasing: ";
for (int element : myVector) {
cout << element << " ";
}
cout << endl;
myVector.clear();
cout << "Size of the vector after clearing: " << myVector.size() << endl;
return 0;
}
C++面向对象
- 类访问修饰符
- public: 可以被外部访问
- private: 只能在类内部访问
- protected: 可以被子类访问
- 类构造函数 & 析构函数
- 构造函数,作用是初始化对象
- 默认构造函数
Line()
- 带参数的构造函数
Line(double len)
- 初始化列表
Line::Line( double len): length(len)
- 默认构造函数
- 析构函数,作用是释放对象
Line::~Line()
- 拷贝构造函数
- 它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象
- 通过使用另一个同类型的对象来初始化新创建的对象
- 复制对象把它作为参数传递给函数
- 复制对象,并从函数返回这个对象
如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。
拷贝构造函数确保了在创建对象副本时正确地复制了动态分配的内存,并保持了原始对象和新对象之间的独立性。但这会带来性能上的损失,尤其是在处理大型对象或包含复杂资源(如动态分配内存、文件句柄、网络连接等)的对象时。每次拷贝构造函数被调用时,都会执行一次对象的复制操作,这可能会涉及昂贵的资源分配和复制过程。
为了减少性能损失,可以采取以下措施:
- 使用引用传递:在函数参数中使用引用或常量引用来避免不必要的拷贝。
- 移动语义:C++11引入了右值引用和移动构造函数,可以更高效地处理临时对象的拷贝,通过“偷走”资源而不是复制它们。
- 优化拷贝构造函数:如果可能,优化拷贝构造函数的实现,避免不必要的复制操作。
- 使用智能指针:例如,使用std::unique_ptr或std::shared_ptr来自动管理资源,这样可以减少手动内存管理的需要,并且可以更高效地处理对象的复制。