aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Karatarakis <alkarata@microsoft.com>2017-08-28 18:36:25 -0700
committerAlexander Karatarakis <alkarata@microsoft.com>2017-08-28 19:54:01 -0700
commitdc46f68f6a2e7a4079c6ad1e1545705d379b9a51 (patch)
tree8a56205bd343a3211fc1f239559d026387ead267
parent174c264b449dc77ab71ae07aa78673239ebd0c48 (diff)
downloadvcpkg-dc46f68f6a2e7a4079c6ad1e1545705d379b9a51.tar.gz
vcpkg-dc46f68f6a2e7a4079c6ad1e1545705d379b9a51.zip
[Strings::join()] Modify to work for any container
-rw-r--r--toolsrc/include/vcpkg_Strings.h16
1 files changed, 8 insertions, 8 deletions
diff --git a/toolsrc/include/vcpkg_Strings.h b/toolsrc/include/vcpkg_Strings.h
index 7cea63676..a7c6148d7 100644
--- a/toolsrc/include/vcpkg_Strings.h
+++ b/toolsrc/include/vcpkg_Strings.h
@@ -65,20 +65,20 @@ namespace vcpkg::Strings
template<class Container, class Transformer, class CharType>
std::basic_string<CharType> join(const CharType* delimiter, const Container& v, Transformer transformer)
{
- if (v.size() == 0)
+ const auto begin = v.begin();
+ const auto end = v.end();
+
+ if (begin == end)
{
return std::basic_string<CharType>();
}
std::basic_string<CharType> output;
- const size_t size = v.size();
-
- output.append(transformer(v[0]));
-
- for (size_t i = 1; i < size; ++i)
+ output.append(transformer(*begin));
+ for (auto it = std::next(begin); it != end; ++it)
{
output.append(delimiter);
- output.append(transformer(v[i]));
+ output.append(transformer(*it));
}
return output;
@@ -86,7 +86,7 @@ namespace vcpkg::Strings
template<class Container, class CharType>
std::basic_string<CharType> join(const CharType* delimiter, const Container& v)
{
- using Element = decltype(v[0]);
+ using Element = decltype(*v.begin());
return join(delimiter, v, [](const Element& x) -> const Element& { return x; });
}