2014-11-04 68 views
0

我在使用矢量結束添加元素時遇到了麻煩。將用戶的N個元素添加到矢量結束符

我的結構:

std::vector<process_s> process_v; 

我的下一步是填充兩條線:

 process_v.at(1).type_id = 1; 
     process_v.at(1).line_id = 1; 
     process_v.at(1).product_id = 2; 

而且

 process_v.at(2).type_id = 1; 
     process_v.at(2).line_id = 2; 
     process_v.at(2).product_id = 2; 

struct process_s { 
     int type_id; 
     int line_id; 
     int product_id; 
     }; 

然後,我用它轉換爲矢量

從現在起,我的目標是獲取所有用戶輸入,並從第一行(1)或第二行(2)開始添加。 一旦所有的數據都得到了,我會用ODD和EVEN複製它,或者換句話說,我會複製第一行(1)到第三行(3)和第二行(2)相同的行(4),第行數也是未知的。

process.at(1) = 1 

或者

process(1).push_back = 1 

從這一點我需要:

的第一個問題是試圖從從第一或第二線最終用戶輸入添加更多的數據,使用這種嘗試將所有用戶輸入存儲在各自的行上,一旦用戶完成輸入,寫入如下的TXT:

規範是針對此類型(type_id)並且需要在線(line_i d),第一個產品需要(product_id),第二個(product_id)等...

這些都沒有工作,有人會指點我什麼,我錯過了嗎?

感謝諮詢

+1

例如沒有'。在(1)'在你的載體中。矢量只是空的。首先你需要'push_back'元素。 (你也沒有轉換成你正在初始化矢量的矢量)。啊,也許是一個好主意,改變標題,以獲得更多的意見,這是一個有點混亂。並且請解釋'line'的意思(也許你的意思是一個「行」(例如在(0)處),這通常表示爲位置。 – 2014-11-04 12:54:09

+0

Line是產品需要存儲的方式,所以一條線與一些產品,另一條線與其他產品。目標是使TXT逐步解釋如何存儲產品,產品的數量是不知道的,如線條,這將由另一個功能的產品規格決定,從現在開始我的問題是如何讓這個數組/矢量具有所有數據來製作報告並檢查邏輯是否有效 – Wisdown 2014-11-04 14:12:12

+0

如果您引用矢量的元素,請不要使用字線 – 2014-11-04 14:47:29

回答

2

默認情況下,當你創建一個向量是空的,所以你不能指的是「第一」或載體「第二」元素。

如果你知道你的載體應該有2個元素,你可以用大小爲2初始化:

std::vector<process_s> process_v(2); 

然後你可以填充它:

process_v.at(0).type_id = 1; 
    process_v.at(0).line_id = 1; 
    process_v.at(0).product_id = 2; 

    process_v.at(1).type_id = 1; 
    process_v.at(1).line_id = 2; 
    process_v.at(1).product_id = 2; 

注意向量是從零開始在C++中,所以你需要參考第一行process_v.at(0)(或process_v[0]

如果你不知道你的向量應該有多大,你應該使用push_back添加process_s到矢量:

std::vector<process_s> process_v; 

process_s p; 
p.type_id = 1; 
p.line_id = 1; 
p.product_id = 2; 

process_v.push_back(p); 

或者

process_v.push_back(process_s{1,1,2}); 

或者

process_v.push_back({1,1,2}); 
+0

使用來自矢量的定界矢量第一部分我看到如何設置行process_v.at(0)到第一行或process_v.at(1)到第二行...但是關於第二個例子?process_v.push_back({1,1,2} )沒有參考關於女巫線將被添加...我也很迷惑ü如何繼續增加它,例如: process_v.push_back({1,1,2}) 如果用戶插入更多3 itens:10,90,1118? 我需要讀取矢量的整行並重新制作字符串: process_v.push_back({1,1,2,10,90,1118}) 或 process_v.push_back({10}) process_v.push_back( {20}) process_v.push_back({118}) – Wisdown 2014-11-04 14:06:15

+0

[push_back](http://www.cplusplus.com/reference/vector/vector/push_back/)在向量的末尾添加一個新元素。所以,如果它原來是空的,在調用'push_back'之後它的大小就是1.'push_back'將傳遞給它的值的一個副本。我添加了一個更明確地調用'push_back'的示例,希望能夠更清楚地說明。 'push_back({1,1,2})'只是捷徑。 – 2014-11-04 14:33:38

+0

編譯沒有錯誤的第一個示例:std :: vector process_v; process_s p; p.type_id = 1; p.line_id = 1; p.product_id = 2; process_v.push_back(p); 另外兩個給出一些錯誤。順便說一下,當程序運行並嘗試插入數據時,我收到以下消息:「此應用程序已請求運行時以不同尋常的方式終止它,請聯繫應用程序支持團隊以獲取更多信息。」 我使用Windows 7 x64並使用Dev-C++進行編譯4.9.9.2 – Wisdown 2014-11-04 16:31:36