2014-12-14 2 views
-1

나는 다음과 같은 코드를 실행하고, 그러나 나는 다음과 같은 오류 메시지가 무엇입니까 호출 오류 :C++ 벡터 :와 push_back

오류 : 비 클래스 타입 인 멤버 'vec1'에 '와 push_back'에 대한 요청 "표준 : 벡터 [5]

에러 : 비 클래스 형인 부재 'VEC2'에서 '와 push_back'요청 '표준 : 벡터 [5]

오류 : 매치 for 'operator *'for '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) << " "; 
    } 
} 
+3

'벡터 vec1 [5];'정말로 벡터 배열이 필요합니까? – drescherjm

+0

'결과를 포인터 표기법을 사용하여 배열에 저장합니다 .' 새로운 [] :'std :: vector vec3 (length);을 사용하지 않고도 여전히 벡터를 사용하고'포인터 표기법 '을 사용할 수 있습니다. int * ptr = & vec3 [0]'그렇지 않으면 코드에 메모리 누수가 있습니다. – PaulMcKenzie

답변

2

당신은 사용한다 : -

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

은 다음

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

벡터들 대신

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

같이 정의 할 필요가 원하는 양 예약

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

을 그리고 또한

delete [] ptr; 

이 될 것 할당 된 동적 배열을 삭제하는 것을 잊지 마세요 : 당신이 그들의 잠재적 인 요소에 대한 메모리를 예약 할 수있는 벡터의 정의 후 또한

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

길이가 int 대신 size_t 유형으로 선언되는 것이 더 좋습니다. 이 경우 음수 값이 있는지 여부를 확인할 필요가 없습니다.