簡體   English   中英

將數組分配給std :: vector會給出錯誤的輸出

[英]Assigning array to std::vector gives incorrect output

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

int p[5] = {1,2,3,4,5};
vector<int> x(p[0], p[4]);

class Polynomial {    
};

int main(){
    Polynomial Poly;

    unsigned int i;

    for(i = 0;i<=4; i++)
        cout<< x[i]<<endl;

    return 0;


}

上面的代碼輸出:


-1073741824
0
-1073741824
-2018993448

而我希望它能輸出

1
2
3
4

為什么輸出不正確,我在做什么錯?

i大於0時,訪問x[i]越界,因為x是一個包含一個值為5(= p[4] )的向量(= p[0] )的向量。

這是因為vector<int> v(a, b)創建一個向量,每個向量a元素值為b

要實現您想要的目標( xp相同),您需要:

#include <iterator>

vector<int> x(std::begin(p), std::end(p))

或者,您自己猜測大小:

vector<int> x(p, p + 5);

或者也許有點像C:

vector<int> x(p, p + sizeof(p)/sizeof *p);

vector<int> x(p[0], p[4]); 並沒有達到您的期望。 它使用p[0]元素的值p[4]構造一個vector

std :: vector :: vector的重載將在此處調用。

explicit vector( size_type count,
                 const T& value,
                 const Allocator& alloc = Allocator());

如果嘗試cout << x.size(); 您會發現vector的大小為1 ,當i > 0超出范圍並導致UB時, cout << x[i]

您可能要調用此重載:

template< class InputIt >
vector( InputIt first, InputIt last,
        const Allocator& alloc = Allocator() );

然后將其更改為vector<int> x(&p[0], &p[4]); 請注意,這將具有4元素的構造函數vector vector<int> x(&p[0], &p[5]); 將構造函數vectorp所有5元素一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM