多个向量的数据表示
Data representation for multiple vectors
>我有两个项目目录和电影。我需要用特定的电影集表示一个目录(每个目录只有 4 个(。假设我们有 2 个目录和 8 部电影。1 个目录将包含 4 个电影,另一个目录将包含 4 个。以编程方式,第 0 个目录包含:0 到 3 个电影 ID,第 1 个目录包含:4 到 7 个电影 ID。我已经编写了以下代码,但在向量的帮助下无法实现所需的预期输出与原始输出所示。
#include <iostream>
#include <vector>
using namespace std;
const int noofmovies = 4;
class Myclass{
private:
int directory;
vector<int> directories;
vector<int> movies;
public:
void read();
void display() const;
};
void Myclass::read(){
cout << "Enter number of directories: " << endl;
cin >> directory;
for(int i=0;i<directory;i++){
directories.push_back(i);
}
for(int j=0;j<(directory*noofmovies);j++){
movies.push_back(j);
}
}
void Myclass::display() const{
for(int i=0;i<directories.size();i++){
cout << "directory[" << i << "]" << " contains " << endl;
}
for(int j=0;j<movies.size();j++){
cout << "movies[" << j <<"]" <<endl;
}
}
int main(){
Myclass my;
my.read();
my.display();
}
原始输出:
Enter number of directories:
2
directory[0] contains
directory[1] contains
movies[0]
movies[1]
movies[2]
movies[3]
movies[4]
movies[5]
movies[6]
movies[7]
预期输出:
Enter number of directories:
2
directory[0] contains
movies[0]
movies[1]
movies[2]
movies[3]
directory[1] contains
movies[4]
movies[5]
movies[6]
movies[7]
好吧,我尝试修改循环,如下所示,但结果不是我想要的:
void Myclass::read(){
cout << "Enter number of directories: " << endl;
cin >> directory;
for(int i=0;i<directory;i++){
directories.push_back(i);
for(int j=0;j<noofmovies;j++){
movies.push_back(j);
}
}
}
void Myclass::display() const{
for(int i=0;i<directories.size();i++){
cout << "directory[" << i << "]" << " contains " << endl;
for(int j=0;j<movies.size();j++){
cout << "movies[" << j <<"]" <<endl;
}
}
}
问题出在Myclass::display() const
成员函数上。其他函数的两个实现都很好。
您的最后一次尝试是最接近的。唯一的问题是嵌套for
循环的循环边界。
目前你循环所有movies
,即
for (int j=0 ; j < movies.size() ; j++)
这是不正确的,因为它使每个目录看起来好像拥有所有电影。但是,目录i
拥有从i*noofmovies
(包括(到(i+1)*noofmovies
,独占的电影。换句话说,将内部循环更改为
for (int j=i*noofmovies ; j < (i+1)*noofmovies ; j++)
将修复您的程序。
您可以通过以下代码实现此目的
void Myclass::display() const{
int j = 0;
for(int i=0;i<movies.size();i++){
if(i % noofmovies == 0){
cout << "directory[" << j++ << "]" << " contains " << endl;
}
cout << "movies[" << i <<"]" <<endl;
}
}
但是您没有在目录和电影之间拥有实际链接。在现实世界中,我认为如果目录是一个具有属性vector<int> movies
的class
会更好。然后,您可以迭代vector<Directory> directories
并为每个directory
迭代其movies
。
相关文章:
- 从自定义数据类型向量中删除重复元素
- C++:自定义数据类型向量错误的队列
- pybind11:用可选数据表示并集
- C++ - 按自定义数据类型向量的值删除元素
- 添加字符串向量和不同数据类型向量的映射
- 复杂数据类型向量的迭代器
- 从自定义数据类型向量数组C 删除
- 具有奇怪数据的向量的第一个元素
- 用于固定大小和预定义类型数据的C++向量、列表或数组
- 从中移动数据的向量的容量
- 在堆上创建多态对象的数据成员向量
- 为概率分布的数据表示寻求建议
- 多个向量的数据表示
- 将c_string转换为字符串再转换回c_string时数据表示形式丢失
- 用类fnc中的数据填充向量
- 使用复杂的数据结构(向量数组的数组数组)时内存泄漏
- 毁灭战士 3 来源:为什么表示 2 向量的类会重载下标运算符两次
- 如何在C++中获取二进制数据作为向量<complex>?
- 数据在向量中的均匀分布
- 最方便的表示向量引用的向量的方法