相关疑难解决方法(0)

我应该比const_iterators更喜欢迭代器吗?

最近有人提出 Scott Meyers的文章说:

  • 身高iterators超过const_iterators(PDF链接).

其他人评论说这篇文章可能已经过时了.我想知道你的意见是什么?

这是我的:文章的一个要点是你不能删除或插入const_iterator,但我认为用它作为反对的论据很有趣const_iterators.我认为它的全部意义const_iterators在于你根本不修改范围,也不是通过插入或删除来替换它们的值或范围.或者我错过了什么?

c++ iterator stl const-iterator

27
推荐指数
2
解决办法
1万
查看次数

在C++中是否有标准的循环迭代器

基于以下问题:检查一个字符串是否是其他字符串的旋转

我正在考虑制作一个带有范围的循环迭代器类型,并且能够像这样解决上述问题:

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),但宁可使用已经制作/测试过的实现.

c++ iterator stl

22
推荐指数
2
解决办法
2万
查看次数

什么类型的变量包含范围?

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*是?

编辑:假设我想将此变量用作子程序中的参数:因此子程序具有此循环,该循环遍历该范围.我宁愿使用两个描述范围的变量而不是使用泛型,因为泛型会导致更高的努力.但我认为使用一个描述范围的变量会导致更高的可读性,这就是我问这个问题的原因.

variables types programming-languages ada range

5
推荐指数
1
解决办法
151
查看次数

有没有办法检查迭代器是否有效?

例如,对于操作容器映射的两个线程,测试迭代器是否仍然有效的正确方法是什么(出于性能原因)?
或者只是间接的方式可以做到这一点.这个示例代码:

#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)

c++ performance iterator stl

3
推荐指数
1
解决办法
5891
查看次数