嘿所以我相當新的進入c + +和我遇到了這個問題,我想將一個std列表的字符串拆分成兩個列表。C++將std列表分爲兩個列表
例如:list(1,2,3,4)
- >list1(1,2) & list2(3,4)
我猜splice
就是我應該使用這一點,但我不明白它是如何工作在所有...
可有人請諮詢我這個怎麼做?
對不起,我的英語不好,謝謝你幫助大家。
嘿所以我相當新的進入c + +和我遇到了這個問題,我想將一個std列表的字符串拆分成兩個列表。C++將std列表分爲兩個列表
例如:list(1,2,3,4)
- >list1(1,2) & list2(3,4)
我猜splice
就是我應該使用這一點,但我不明白它是如何工作在所有...
可有人請諮詢我這個怎麼做?
對不起,我的英語不好,謝謝你幫助大家。
「我有理由新成C++」
這是用戶使用Java或C#經驗,未來的一個普遍的誤解,認爲std::list
是在他們的語言的確切行爲替代的List
。實際上對於提到的兩個,它在C++中是std::vector
。
「我想將列表的一半分成一個列表,另一半列入另一列表。
您可以輕鬆地做到這一點,放棄std::list
,並切換到std::vector
如果可能的話:
#include <iostream>
#include <vector>
void print(const std::string name, const std::vector<int>& v) {
std::cout << name << " = { ";
bool first = true;
for(auto i : v) {
if(!first) {
std::cout << ", ";
}
else {
first = false;
}
std::cout << i;
}
std::cout << " }" << std::endl;
}
int main() {
std::vector<int> master { 1, 2, 3, 4};
size_t halfPos = master.size()/2;
if(halfPos > 0) {
std::vector<int> firstPart(master.begin(),master.begin() + halfPos);
std::vector<int> lastPart(master.begin() + halfPos,master.end());
print("master",master);
print("firstPart",firstPart);
print("lastPart",lastPart);
}
return 0;
}
輸出:
master = { 1, 2, 3, 4 }
firstPart = { 1, 2 }
lastPart = { 3, 4 }
如上所述std::list::splice()
具有完全不同的目的。
如果你真的需要有一個std::list
,你唯一的選擇是迭代和計數。 std::list::iterator
不支持operations like +
。
是的,我第一次使用矢量,所以改回np哈哈,謝謝你的偉大答案。 – ForkInPepsi 2014-11-01 14:58:07
嘗試使用以下
#include <iostream>
#include <list>
#include <string>
#include <iterator>
int main()
{
std::list<std::string> lst1 = { "1", "2", "3", "4" };
for (const auto &s : lst1) std::cout << s << ' ';
std::cout << std::endl;
std::cout << std::endl;
std::list<std::string> lst2;
lst2.splice(lst2.begin(),
lst1,
lst1.begin(),
std::next(lst1.begin(), lst1.size()/2));
for (const auto &s : lst2) std::cout << s << ' ';
std::cout << std::endl;
for (const auto &s : lst1) std::cout << s << ' ';
std::cout << std::endl;
return 0;
}
輸出是
1 2 3 4
1 2
3 4
另一種方法
#include <iostream>
#include <list>
#include <string>
#include <iterator>
int main()
{
std::list<std::string> lst1 = { "1", "2", "3", "4" };
for (const auto &s : lst1) std::cout << s << ' ';
std::cout << std::endl;
auto middle = std::next(lst1.begin(), lst1.size()/2);
std::list<std::string> lst2(lst1.begin(), middle);
std::list<std::string> lst3(middle, lst1.end());
for (const auto &s : lst2) std::cout << s << ' ';
std::cout << std::endl;
for (const auto &s : lst3) std::cout << s << ' ';
std::cout << std::endl;
return 0;
}
輸出是
1 2 3 4
1 2
3 4
那些是不是字符串的整數列表 – P0W 2014-11-01 14:15:34
好吧,['std :: list :: splice'](http://en.cppreference.com/w/cpp/container/list/splice)cppreference中有一個例子。 com文檔。 – 2014-11-01 14:16:45
分裂的標準是什麼?只是位置? – 2014-11-01 14:18:16