C ++ Vectors:调用push_back时出错

时间:2014-12-14 16:22:10

标签: c++ codeblocks

我正在执行以下代码,但是我收到以下错误消息:

错误:请求会员' push_back' in' vec1',这是非类型' std :: vector [5]'

错误:请求会员' push_back' in' vec2',这是非类型' std :: vector [5]'

错误:不匹配'运营商*' in' vec1 [i] * vec2 [i]'

我试图将两个向量相乘(通过动态获取输入)并使用指针表示法将结果存储在数组中。请帮帮我?谢谢!

#include<iostream>
#include<vector>
using namespace std;

int main()
{
    int value1, value2;

    int length;

    cout << "Please enter the size of the vectors" << endl;
    cin >> length;

    vector<int> vec1[5];
    vector<int> vec2[5];

    cout << "Please enter the values for vector 1" << endl;
    for(int i = 0; i < length; i++){
        cin >> value1;
        vec1.push_back(value1);
    }

    cout << "Please enter the values for vector 2" << endl;
    for(int i = 0; i < length; i++){
        cin >> value2;
        vec2.push_back(value2);
    }

    int *ptr = new int[length];

    for(int i = 0; i < length; i++){
        ptr[i] = vec1[i] * vec2[i];
    }

    for(int i = 0; i < length; i++){
        cout << *(ptr + i) << " ";
    }
}

2 个答案:

答案 0 :(得分:2)

出于您的目的,您应该使用: -

vector<int> vec1; 
vector<int> vec2;

然后保留你想要的任何金额

vec1.reserve(5);
vec2.reserve(5);

答案 1 :(得分:1)

矢量必须定义为

vector<int> vec1;
vector<int> vec2;

而不是

vector<int> vec1[5];
vector<int> vec2[5];

在矢量定义之后,您可以为其潜在元素保留记忆:

vec1.reserve( length );
vec2.reserve( length );

不要忘记删除分配的动态数组

delete [] ptr;

如果将长度声明为类型size_t而不是int,那也会更好。在这种情况下,您无需检查它是否具有负值。