Python-类似于 C++ 中的字符串乘法
Python-like string multiplication in C++
作为一名长期的 Python 程序员,我非常欣赏 Python 的字符串乘法功能,如下所示:
> print("=" * 5) # =====
因为 C++ std::string
没有 *
重载,所以我设计了以下代码:
#include <iostream>
#include <string>
std::string operator*(std::string& s, std::string::size_type n)
{
std::string result;
result.resize(s.size() * n);
for (std::string::size_type idx = 0; idx != n; ++idx) {
result += s;
}
return result;
}
int main()
{
std::string x {"X"};
std::cout << x * 5; // XXXXX
}
我的问题:是否可以做得更多idiomatic/effective(或者我的代码有缺陷)?
简单地使用 right constructor 作为您的简单示例怎么样:
std::cout << std::string(5, '=') << std::endl; // Edit!
对于真正的乘法 字符串你应该使用一个简单的内联函数(和reserve()
以避免多次重新分配)
std::string operator*(const std::string& s, size_t n) {
std::string result;
result.reserve(s.size()*n);
for(size_t i = 0; i < n; ++i) {
result += s;
}
return result;
}
并使用它
std::cout << (std::string("=+") * 5) << std::endl;
看到一个Live Demo
作为一名长期的 Python 程序员,我非常欣赏 Python 的字符串乘法功能,如下所示:
> print("=" * 5) # =====
因为 C++ std::string
没有 *
重载,所以我设计了以下代码:
#include <iostream>
#include <string>
std::string operator*(std::string& s, std::string::size_type n)
{
std::string result;
result.resize(s.size() * n);
for (std::string::size_type idx = 0; idx != n; ++idx) {
result += s;
}
return result;
}
int main()
{
std::string x {"X"};
std::cout << x * 5; // XXXXX
}
我的问题:是否可以做得更多idiomatic/effective(或者我的代码有缺陷)?
简单地使用 right constructor 作为您的简单示例怎么样:
std::cout << std::string(5, '=') << std::endl; // Edit!
对于真正的乘法 字符串你应该使用一个简单的内联函数(和reserve()
以避免多次重新分配)
std::string operator*(const std::string& s, size_t n) {
std::string result;
result.reserve(s.size()*n);
for(size_t i = 0; i < n; ++i) {
result += s;
}
return result;
}
并使用它
std::cout << (std::string("=+") * 5) << std::endl;
看到一个Live Demo