对字符串副本执行迭代器运算的更简单方法
Easier way to do iterator arithmetic on string copies
我有一个字符串(format_
)的副本(result
),然后在原始字符串上使用std::find
,但我不能在字符串副本上使用由此获得的迭代器。这导致了一些繁琐的代码。例如:
std::string result = format_;
auto it = std::find(format_.begin(), format_.end(), '%');
auto diff = it - format_.begin();
auto pos_it = result.begin() + diff;
result.insert(result.erase(pos_it, pos_it + 2), right.begin(), right.end());
在这里,如果我试图将它用作迭代器,而不仅仅是用于数学,我会遇到分段错误。如果两个字符串相同,为什么不能"共享"迭代器?
不能在字符串之间共享迭代器(即使它们相同),因为它们占用单独的内存位置,并且迭代器可能在内部使用内存指针来直接访问字符串的元素。
作为一种替代方案,您可以在字符串中使用索引位置偏移。
也许是这样的:
int main()
{
std::string right = "INSERT";
std::string format_ = "some % text";
auto pos = format_.find('%', 0); // pos is std::string::size_type (not iterator)
std::string result = format_;
if(pos != std::string::npos)
result.replace(pos, 1, right);
std::cout << result << 'n';
}
相关文章:
- 查找定义我的 C/C++ 函数/宏的文件比'grep'更简单的方法
- 让类与运算符一起工作更简单的方法
- 多个 if-else 测试的更简单方法
- 为具有多个参数的函数创建 SWIG 类型图的更简单方法?
- 有没有更简单的方法可以从用户那里获取三个数字并按升序打印它们?
- 约束模板参数顺序的更简单方法
- C++ 将整数与硬编码的整数集进行比较的更简单方法
- 有没有一种方法可以在基于枚举的可变参数模板函数之间进行选择,这比将函数包装在结构中更简单
- 一种在没有 root 的情况下加载共享库的更简单方法
- 是否有一种更简单的方法可以使用GDB将C捕获的C结构捕获
- 生活的游戏邻居检查(更简单的方法可能吗?)
- 有没有更简单的方法可以做到:if(num1 > num2 && num1 > num3),以获得更大的变量列表进行比较?
- 有没有更简单的方法在 Rcpp 中使用 NumericVector 编写条件语句
- 访问派生属性和给定基指针的方法的更简单方法
- 为对象::tr传递QString的更简单方法
- 实现.cpp文件的更简单方法
- 为SPOJ NAKANJ编写条件块的更简单方法-最小骑士移动
- 让shared_ptr拥有现有指针的更简单方法
- 对字符串副本执行迭代器运算的更简单方法
- 计算矢量中相同字符串的更简单方法