【发布时间】:2021-02-02 14:27:03
【问题描述】:
尽管在 C++ 中连接两个 std::vectors 很简单,尤其是对于范围,但我遇到了一个稍微不同的问题。
假设我有以下向量:{1,2,6}、{6, 8, 9}、{9, 8, 10} 等等。如果一个向量的尾部与连接到的下一个向量的头部相同,我希望最终向量中只有一个元素,如下所示:
conc({1,2,6}, {6,8,9}, {9,8,10}, {0, 1}) = {1,2,6,8,9,8,10,0,1}
我可以使用if 条件来做到这一点,但我认为它效率不高,因为我必须这样做数十万次,最好使用 STL 而没有外部库。
如果有帮助,总是只有 4 个向量需要连接。
编辑:被连接的向量的末尾和开头可能有也可能没有相同的元素。
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v1{1,2,6};
std::vector<int> v2{6,8,9};
std::vector<int> v3{9,8,10};
std::vector<int> v4{0, 1};
std::vector<int>V{v1};
if (v1.back() == v2.front())
{
for(auto it= v2.begin()+1; it != v2.end(); ++it)
{
V.push_back(*it);
}
}
else
{
for(auto it= v2.begin(); it != v2.end(); ++it)
{
V.push_back(*it);
}
}
//repeat the above prcess for other vectors
}
【问题讨论】:
-
请出示您的代码。你忘了问一个问题。您正在寻找标准算法?
-
@Morpheus 这些向量 {9,8,10}, {0, 1} 是如何连接的?
-
@VladfromMoscow 把它们放在一起{9,8,10,0,1}
-
您是否只是认为它效率低下,或者您是否真的测量您的这部分代码大大减慢了您的程序,以至于它可能值得改进吗?人们经常担心性能问题。
-
我正在回家的路上。我会尽快发布代码。
标签: c++ vector concatenation