基于以下问题:检查一个字符串是否是其他字符串的旋转
我正在考虑制作一个带有范围的循环迭代器类型,并且能够像这样解决上述问题:
std::string s1 = "abc" ;
std::string s2 = "bca" ;
std::size_t n = 2; // number of cycles
cyclic_iterator it(s2.begin(),s2.end(),n);
cyclic_iterator end;
if (std::search(it, end, s1.begin(),s1.end()) != end)
{
std::cout << "s1 is a rotation of s2" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我的问题,是否已经有这样的东西?我检查了Boost和STL,但都没有确切的实现.
我有一个简单的手写(源自一个std::forward_iterator_tag专门的版本std::iterator),但宁可使用已经制作/测试过的实现.
甲for循环可以进行阿达使用具有开始和结束点的范围内:
for I in 0..10 loop
(...)
end loop;
Run Code Online (Sandbox Code Playgroud)
我知道,可以使用描述范围的两个变量来执行for循环:
for I in range_start..range_end loop
(...)
end loop;
Run Code Online (Sandbox Code Playgroud)
是否也可以将范围存储在一个变量中?,如:
for I in my_range loop
(...)
end loop;
Run Code Online (Sandbox Code Playgroud)
哪个类型的变量*my_range*是?
编辑:假设我想将此变量用作子程序中的参数:因此子程序具有此循环,该循环遍历该范围.我宁愿使用两个描述范围的变量而不是使用泛型,因为泛型会导致更高的努力.但我认为使用一个描述范围的变量会导致更高的可读性,这就是我问这个问题的原因.
例如,对于操作容器映射的两个线程,测试迭代器是否仍然有效的正确方法是什么(出于性能原因)?
或者只是间接的方式可以做到这一点.这个示例代码:
#define _SECURE_SCL 1
//http://msdn2.microsoft.com/en-us/library/aa985973.aspx
#define _SECURE_SCL_THROWS 1
#include "map"
#include "string"
#include "exception"
#include "iostream"
using namespace std;
void main(void)
{
map<string, string> map_test;
map<string, string>::iterator iter_map_test;
map_test [ "AAAAA" ] = "11111";
map_test [ "BBBBB" ] = "22222";
map_test [ "CCCCC" ] = "33333";
iter_map_test = map_test.find ("BBBBB");
map_test.erase ("BBBBB");
try
{
string value = (*iter_map_test).second;
}
catch ( exception & e )
{
cout << e.what() << endl;
}
catch ( ... )
{
cout << …Run Code Online (Sandbox Code Playgroud)