对象的C++向量,它们都命名为temp吗

C++ Vector of Objects, are they all named temp?

本文关键字:命名为 temp C++ 向量 对象      更新时间:2024-09-26

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 的更多详细信息

将给定的元素值追加到容器的末尾。

  1. 新元素被初始化为值的副本

https://en.cppreference.com/w/cpp/container/vector/push_back

如果你只是在谈论这部电影的名字,它将是从cin输入的。对象本身没有名称。局部变量名";temp";只是你在编写代码时看到的,但只是用来告诉编译器正在使用哪个对象——从编译器的角度来看,对象本身没有名称。