标签: boost-foreach

如何使用BOOST_FOREACH同时迭代两个向量?

我想用BOOST FOREACH复制以下内容

std::vector<int>::const_iterator i1;
std::vector<int>::const_iterator i2;
for( i1 = v1.begin(), i2 = v2.begin();
     i1 < v1.end() && i2 < v2.end();
     ++i1, ++i2 )
{
     doSomething( *i1, *i2 );
}
Run Code Online (Sandbox Code Playgroud)

c++ boost iterator boost-foreach

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

Boost 1.46.1,属性树:如何迭代ptree接收子ptree?

首先,我要说我认为我应该怎么做但我的代码不会以任何方式编译我尝试.我的假设基于这个空ptree技巧的官方例子.在那里你可以找到下一行:

  const ptree &settings = pt.get_child("settings", empty_ptree<ptree>());
Run Code Online (Sandbox Code Playgroud)

这表明从(或应该)可以从ptree中获取subptree.

所以我假设我们可以用BOOST_FOREACH这样的方式迭代到ptree :

BOOST_FOREACH(const boost::property_tree::ptree &v,
    config.get_child("servecies"))
{

}
Run Code Online (Sandbox Code Playgroud)

但我得到下一个错误:

错误1错误C2440:'初始化':无法从'std :: pair <_Ty1,_Ty2>'转换为'const boost :: property_tree :: ptree&'

或者如果我尝试

BOOST_FOREACH(boost::property_tree::ptree &v,
    config.get_child("servecies", boost::property_tree::empty_ptree<boost::property_tree::ptree>()))
{

}
Run Code Online (Sandbox Code Playgroud)

我明白了:

错误1错误C2039:'empty_ptree':不是'boost :: property_tree'的成员

那我该怎么做:如何通过Boost Ptree迭代并得到子Ptrees?

更新: 我也试过这样的代码

    BOOST_FOREACH(boost::property_tree::ptree::value_type &v,
    config.get_child("path.to.array_of_objects"))
{
    std::cout << "First data: " << v.first.data() << std::endl;
    boost::property_tree::ptree subtree = (boost::property_tree::ptree) v.second ;
    BOOST_FOREACH(boost::property_tree::ptree::value_type &vs,
        subtree)
    {
        std::cout << "Sub data: " << vs.first.data() << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

这编译,不会抛出任何exeptions但不会cout任何 …

c++ boost subtree boost-propertytree boost-foreach

30
推荐指数
3
解决办法
5万
查看次数

用"纯"C++ 11替代替换BOOST_FOREACH?

是否有可能BOOST_FOREACH用"纯"C++ 11等效替换本例中的?

#include <map>
#include <functional>
#include <boost/foreach.hpp>
#include <iostream>

int main() {
  std::map<int, std::string> map = {std::make_pair(1,"one"), std::make_pair(2,"two")};
  int k;
  std::string v;
  BOOST_FOREACH(std::tie(k, v), map) {
    std::cout << "k=" << k << " - " << v << std::endl;
  }
}
Run Code Online (Sandbox Code Playgroud)

关键特性是将键/值对保留在k和的引用中v.

我试过了:

for(std::tie(k,v) : map)
{
  std::cout << "k=" << k << " - " << v << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

auto i = std::tie(k,v);
for(i : map)
{
  std::cout << "k=" …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-foreach c++11

19
推荐指数
1
解决办法
5968
查看次数

使用BOOST_FOREACH迭代目录中的所有文件

你可以使用boost :: filesystem和BOOST_FOREACH迭代目录中的所有文件吗?我试过了

path dirPath = ...
int fileCount = 0;
BOOST_FOREACH(const path& filePath, dirPath)
    if(is_regular_file(filePath))
        ++fileCount;
Run Code Online (Sandbox Code Playgroud)

此代码编译,运行,但不会产生所需的结果.

c++ boost boost-filesystem boost-foreach

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

需要帮助BOOST_FOREACH /编译器错误

我知道boost或编译器应该是最后的责任,但我在这里看不到另一种解释.我正在使用msvc 2008 SP1并提升1.43.

在下面的代码片段中,执行永远不会离开第三个 BOOST_FOREACH循环

typedef Graph<unsigned, unsigned>::VertexIterator Iter;

Graph<unsigned, unsigned> g;
g.createVertex(0x66);

// works fine
Iter it = g.getVertices().first, end = g.getVertices().second;
for(; it != end; ++it)
    ;

// fine
std::pair<Iter, Iter> p = g.getVertices();
BOOST_FOREACH(unsigned handle, p)
    ;

// fine
unsigned vertex_count = 0;
BOOST_FOREACH(unsigned handle, g.getVertices())
    vertex_count++;

// oops, infinite loop
vertex_count = 0;
BOOST_FOREACH(unsigned handle, g.getVertices()) 
    vertex_count++;

vertex_count = 0;
BOOST_FOREACH(unsigned handle, g.getVertices())
    vertex_count++;

// ... last block repeated 6 times
Run Code Online (Sandbox Code Playgroud)

迭代器代码:

class Iterator 
    : …
Run Code Online (Sandbox Code Playgroud)

c++ boost visual-c++ boost-foreach

14
推荐指数
1
解决办法
1211
查看次数

BOOST_FOREACH与for循环

我想就BOOST_FOREACH的使用提出建议.

我已经读过它并不是真的建议在性能方面是一个非常重的标题.

此外,它强制使用"break"和"continue"语句,因为你不能真正拥有由布尔驱动的退出条件,并且我总是被告知应该尽可能避免"break"和"continue".

当然,优点是您不直接处理迭代器,这样可以简化迭代容器的任务.

你怎么看待这件事 ?您是否认为如果使用它应该系统地采用以保证项目的同质性或仅在某些情况下建议使用它?

c++ boost for-loop boost-foreach

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

使用boost属性树解析JSON

我正在构建一个从themoviedb.com获取电影信息的应用程序.该信息在JSON文件中提供.我正在尝试使用boost属性树存储信息.但有一点问题.

我通过以下代码说明了这个问题:

#include <vector>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/foreach.hpp>

using namespace std;
using boost::property_tree::ptree;

class single_t{
    int             sID;
    string          sName;
public:
    void            setID(int ID){sID=ID;}
    int             getID(){return sID;}
    void            setName(string Name){sName=Name;}
    string          getName(){return sName;}
};

typedef vector<single_t*> multiple_t;

class foo{
    string          fTitle;
    multiple_t      fItems;
public:
    string          getTitle(){return fTitle;}
    void            setTitle(string Title){fTitle=Title;}
    multiple_t      getItems(){return fItems;}
    void            setItems(multiple_t Items){fItems = Items;}
    void            setItems(single_t Item){fItems.push_back(&Item);}
};

int main () {
    try{
        string response = "{\"title\":\"Foo\",\"items\":[{\"id\":123,\"name\":\"test1\"},{\"id\":456,\"name\":\"test2\"}]}";

        ptree pt;
        stringstream ss; ss << response;
        read_json(ss, …
Run Code Online (Sandbox Code Playgroud)

c++ json boost boost-propertytree boost-foreach

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

如何将BOOST_FOREACH与仅支持const_iterator的容器一起使用?

我有这个容器:

class /*final*/ Row
{
public:
  typedef FieldIterator const_iterator;
  typedef FieldIterator iterator;
  FieldIterator begin() const;
  FieldIterator end() const;
  FieldIterator begin();
  FieldIterator end();
  ...
};
Run Code Online (Sandbox Code Playgroud)

鉴于此,以下代码编译得很好:

BOOST_FOREACH(Field field, row)
{
}
Run Code Online (Sandbox Code Playgroud)

但是,Row该类不应该具有可变迭代器,因此我通过删除可变访问来更改Row类:

class /*final*/ Row
{
public:
  typedef FieldIterator const_iterator;
  FieldIterator begin() const;
  FieldIterator end() const;
  ...
};
Run Code Online (Sandbox Code Playgroud)

但是现在相同的foreach循环无法编译:

1>o:\c\boost_1_48_0\boost\foreach.hpp(364): error C2039: 'type' : is not a member of 'boost::mpl::eval_if<C,F1,F2>'
1>          with
1>          [
1>              C=boost::mpl::false_,
1>              F1=boost::range_const_iterator<sqlserver::Row>,
1>              F2=boost::range_mutable_iterator<sqlserver::Row>
1>          ]
1>          c:\dev\internal\playmssqlce\playmssqlce.cpp(29) : see reference to class …
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-foreach

8
推荐指数
2
解决办法
2630
查看次数

BOOST_FOREACH对boost :: shared_ptr <list>的迭代

我正在做类似这个项目正确的BOOST_FOREACH用法吗?

但是,我返回的列表包含在boost :: shared_ptr中.如果我没有在BOOST_FOREACH循环之前将列表分配给变量,那么我会在运行时遇到崩溃,因为列表正在被破坏,因为它是临时的.

boost::shared_ptr< list<int> > GetList()
{
    boost::shared_ptr< list<int> > myList( new list<int>() );
    myList->push_back( 3 );
    myList->push_back( 4 );
    return myList;
}
Run Code Online (Sandbox Code Playgroud)

然后......

// Works if I comment out the next line and iterate over myList instead
// boost::shared_ptr< list<int> > myList = GetList();

BOOST_FOREACH( int i, *GetList() ) // Otherwise crashes here
{
    cout << i << endl;
}
Run Code Online (Sandbox Code Playgroud)

我希望能够使用上面的内容而不必引入变量'myList'.这可能吗?

c++ boost shared-ptr temporaries boost-foreach

7
推荐指数
1
解决办法
2883
查看次数

BOOST_FOREACH迭代时对容器的更改?

如果BOOST_FOREACH迭代的容器在BOOST_FOREACH范围内发生了变化,会发生什么?

BOOST_FOREACH"冻结"初始状态吗?

c++ boost boost-foreach

6
推荐指数
1
解决办法
2590
查看次数