对象的C++向量,它们都命名为temp吗
C++ Vector of Objects, are they all named temp?
C++面向对象编程的新手,我最近了解了类和对象。我创建了一个简单的类和菜单驱动程序,将临时对象添加到电影向量中。我有一个快速的问题,我不能完全理解。
我只是在推多个";temp";对象转换为矢量?
在我的脑海中,我将其可视化为向量my_movies={temp,temp,emp};并不断添加"temp"对象,直到用户完成为止。这是正确的描绘方式吗?
#include <iostream>
#include <vector>
using namespace std;
class Movie
{
private:
string name;
public:
string get_name() { return name; }
void set_name(string n) { name = n; }
};
void menu() {
cout << "1. Add movie" << endl;
cout << "2. Show Movies" << endl;
cout << "3. Quit" << endl;
}
int getChoice(int &choice) {
cout << "Enter you choice: ";
cin >> choice;
return choice;
}
int main() {
vector<Movie> my_movies;
int choice = 0;
string name;
do {
menu();
getChoice(choice);
switch (choice) {
case 1: {
Movie temp;
cout << "Set user name: ";
cin >> name;
temp.set_name(name);
my_movies.push_back(temp);
break;
}
case 2: {
for (auto &mv : my_movies)
cout << mv << endl;
break;
}
}
} while (choice != 3);
return 0;
}
在您的情况下,当您调用push_back时,它将复制您的"temp";对象,它是堆栈上的本地对象。它将被复制到一个新的对象中,该对象存储在堆中,由向量对象持有。向量会在内部将它们存储为一个数组(默认向量和默认分配器等(。
也可以";移动";对象(在C++11及更高版本下(,如果您理解其中的区别,但执行push_back(std::move(temp((,这通常会提供更好的性能。在您的情况下,它将避免复制字符串成员";name";,并将其移动,从而避免在向量中为Movie内部的字符串进行新的分配。
请参阅此处了解有关push_back 的更多详细信息
将给定的元素值追加到容器的末尾。
- 新元素被初始化为值的副本
https://en.cppreference.com/w/cpp/container/vector/push_back
如果你只是在谈论这部电影的名字,它将是从cin输入的。对象本身没有名称。局部变量名";temp";只是你在编写代码时看到的,但只是用来告诉编译器正在使用哪个对象——从编译器的角度来看,对象本身没有名称。
相关文章:
- 在Arduino中将PWM通道命名为LEDC是否有特定原因
- C++ std::future 方法应该<T>命名为 is_ready() 还是 ready()?
- 具有全局符号的命名为STD符号Interfier
- 命名为pybind11中的默认参数
- 将文件命名为C
- 将文件重命名为已存在的文件名
- 如果(玩家[P] .setCoin(Gameboard,Input))将其命名为“在线”游戏板的攻击函数)
- 将 .c 文件重命名为 .cpp,导入 Cython 库失败
- 为什么将可执行文件重命名为临时文件的此代码段不能按预期工作?
- 如何在 C++ 中将文件从 ext4 文件系统重命名为 ntfs 文件系统
- 配对的变异模板(命名为元组)
- 被命名为SecurityInfo间歇性故障,错误= 2
- 函数可以命名为default吗
- opencv 命名为 Window leak (C++ 和 opencv)
- 如果我将函数命名为"交换",为什么会出现模板错误,但"交换"可以?
- 从工作iOS项目中导入.cpp文件并将其重命名为.mm问题
- 将 std::vector 重命名为另一个类以进行重载
- 在C/C++中将文件重命名为unicode名称
- RCPP 命名为数字矩阵
- Xcode:为什么重命名为 .mm 失败,仅在静态库中"___gxx_personality_sj0"未定义的符号?