声明一个struct C元素的向量,并且元素的个数为i(输入类型为int)


-2

请看这段代码(并且原谅缺乏知识)。它输出我无法解决的错误。我需要声明一个struct C元素的向量,但是我需要元素个数为i(int类型的输入)。

我也试过其他方法,但在他们所有我收到一个错误(不能将C转换为int等)。我怎样才能做到这一点?

# include <iostream> 
using std::cout; 
using std::cin; 
using std::endl; 

# include <vector> 
using std::vector; 

struct C{ 
    int cor; 
    vector<int>cores; 

    }; 

    void LerVector(vector< C> &array) ; 

int main() 
{ 
    int n; 
    bool done=false; 
     bool don=false; 
    vector<C>cidade; 
    int i; 


    while(!done){ 
    cout<<"Entre o número de cidades "<<endl; 
    cin>>n; 
    if(n>500) 
    { 
     cout<<endl; 
     cout<<"O número máximo é 500"<<endl; 
} 
else 
done=true; 
} 
n--; 
while(!don){ 
cout<<"Entre o número de confederações"<<endl; 
cin>>i; 
if(i>100){ 
cout<<endl; 
cout<<"Número máximo de 100 cidades"<<endl; 

} 
else { 

LerVector( cidade) ; 

don=true; 
} 
} 


    cin.get(); 
    return 0; 
} 
//resolve... 
void LerVector(vector< C> &array) 
    { 
    for (size_t i = 0; i < array.size(); i++) 
     cin>>array[i]; 

    } // end function inputVector 
+1

请给出一个真正的标题 16 3月. 122012-03-16 09:59:33

3

让我们尝试与试图从cin提取到结构C.嘛对象的解释:)

cin >> array[i]; 

,所以它需要一个操作员>>实际执行的工作:

istream & operator>>(istream &is, C &c) { 
    is >> c.cor; // or into whatever member 
    return is; 
} 

另外,作为另一个提到的,你必须真正第一添加元素的矢量:

while(!don){ 
    cout<<"Entre o número de confederações"<<endl; 
    .... 
} else { 
    cidade.resize(i); // resize to i elements 
    LerVector(cidade); 
    don = true; 
} 

下一次,请格式化文本(正确缩进它)。这对我来说很难一步通过:)


0

如果我猜你想要做什么,它应该是这样的:

// First create an empty vector of C's 
vector<C> cidade; 

// cidade has zero elements now 
// Read i from user 
cin >> i; 

// Resize vector to contain i elements 
cidade.resize(i); 

// Then go on and fill them. 
int n; 
for (n = 0; n < i; i++) { 
    cin >> cores; 
    cidade[n].cores.resize(cores); 
    // now cidade[n].cores has 'cores' elements, but they are uninitialized 
} 

1

哪些错误没有你的代码生成?

我也不确定你的代码应该做什么。 在main()中,您创建了一个C的向量。但C也包含一个int向量。这是打算吗?


1

我不是很清楚你想要做什么。

不过,我已经可以看到在我们的代码一个潜在的错误:

在LerVector,你到目前还没有在任何项目的矢量的参考进来,所以有一个大小为0

你要做的是只要我小于大小,就更新数组中的那个项目。然而,当你开始大小是0,所以我不认为你甚至会进入输入循环。现在

,即使你这样做,因为向量不与任何尺寸初始化,你可能会认为你要出界的一个错误。你必须调整阵列的大小。


0

其中std::vector<T>构造函数将初始大小,如果该号码后声明是知道你可以将它传递给构造函数。

cin >> n; 
std::vector<C> cidade(n); 

或者您可以使用resize方法更改矢量的大小。

或者您可以使用add方法来扩展向量(不明确给出大小)。

但总的来说,给代码的完整版本以及代码的更多细节提供帮助可能更容易。