C++ 多向量的数据表示

C++ 多向量的数据表示,c++,vector,C++,Vector,我有两个项目目录和电影。我需要用一组特定的电影来表示一个目录(每个目录只有4部)。假设我们有2个目录和8部电影。一个目录将包含4部电影,另一个目录将包含4部电影。在编程上,它类似的第0个目录包含:0到3个电影ID,第1个目录包含:4到7个电影ID。我已经编写了下面的代码,但是在向量的帮助下,无法实现预期输出与原始输出中所示的需要 #include <iostream> #include <vector> using namespace std; const int n

我有两个项目目录和电影。我需要用一组特定的电影来表示一个目录(每个目录只有4部)。假设我们有2个目录和8部电影。一个目录将包含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
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;
        }
    }

}
void Myclass::read(){
cout目录;

对于(int i=0;i而言,问题在于
Myclass::display()const
成员函数。其他函数的两种实现都很好

您的最后一次尝试是最接近的。您唯一的问题是嵌套的
for
循环的循环边界

目前,您循环播放所有
电影
,即

for (int j=0 ; j < movies.size() ; 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;
    }
}
void Myclass::display()常量{
int j=0;

对于(int i=0;我最后感谢你的建议。我一定会像你说的那样构建我的程序:)@highlander141我相信,通过使用dasblinkenlight的答案,尽管它需要对代码进行最小的更改,但您正在牺牲可读性。我的意思是,从一眼就看不清楚发生了什么,为什么会发生,这对我来说非常重要。
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;
    }
}