2012-03-06 41 views
0

我想獲取矢量的最後一個元素,然後將其分配給字符串,但我似乎遇到了問題。如何獲取矢量的末尾並將其分配給字符串

想象一下這個向量已經被填滿了,但我不知道有多少,所以我試圖做到這一點。

std::vector<std::string> vec; 
std::string s = vec.end(); 

會循環的工作,然後就拿到最後一個索引?

這不起作用,所以有辦法得到一個向量的結尾?

EDIT ------

out.push_back(r.validateR(str)); 
appendCustomizedOutput = out.back(); 
DCS_LOG_DEBUG("END " << appendCustomizedOutput); 
split(test,appendCustomizedOutput,boost::is_any_of("\n")); 
DCS_LOG_DEBUG("END " << test[0]); 

當我嘗試打印測試[0]沒有打印任何內容,我不知道爲什麼?

+0

我們無法真正幫助您,我們不知道您正在分割的字符串中的內容 - 與矢量(或其行爲)無關 - 無論如何 - 此更新似乎是一個新問題。 .. – Nim 2012-03-06 15:57:02

回答

9

vector::end()返回一個超出向量中最後一個實際元素的迭代器(它主要用於迭代檢查)。

最好的辦法是:

std::string s = vec.back(); // last item 

由於@JamesKanze和@PeterWood說,不要忘了檢查空載體 - 否則它是未定義的行爲......

+1

可能會提到檢查它不是空的if(!vec.empty())',否則會發生未定義的行爲。 – 2012-03-06 14:32:50

+0

@PeterWood,將更新答案... – Nim 2012-03-06 15:08:37

+0

@PeterWood我已編輯的問題,如果你可以看一看 – CodersSC 2012-03-06 15:41:16

1

container.end()(或任何種類的容器)將返回一個迭代器到容器的末尾。爲了獲得在容器中的最後一個項目,你想container.back()代替:

std::string s = vec.back(); 
6

這就是vec.back()是。只要確保矢量不是第一個就是空的。

1

end()返回引用矢量容器中過去結束元素的迭代器。 您需要back():它返回對矢量容器中最後一個元素的引用。

2

使用vec.back()得到最後一個元素的引用。使用vec.pop_back()刪除最後一個元素(不返回它)。

相關問題