迭代向量<>得到所有其他元素,但ith

时间:2015-09-02 23:23:00

标签: c++ vector struct

假设我们有一个大小为n的向量。

第一个元素,我们必须从其他元素中获取信息。

第二个元素,我们必须从第一个元素和其他元素中获取信息。

第三个元素,我们必须从元素一,二和其他元素中获取信息。

我应该怎么做呢?代码到目前为止..

vector<struct> myVector;
//vector filled..
for(Struct structure : myVector){
    //??
}

vector[0]需要{vector[1] -> vector[n]}

vector[1]需要{vector[0] , vector[2] -> vector[n]}

vector[2]需要{vector[0] -> vector[1] , vector[3] -> vector[n]}

我的结构看起来像下面的内容,我需要从每个结构中获取学位信息,以便将它与当前的学位信息进行比较(看看它们彼此之间有多远)。

struct Node {
    int degree;
    std::string name;
    int counter;
    Node(std::string aName, int aDegree, int nodeCounter) {
        degree = aDegree;
        name = aName;
        counter = nodeCounter;
    }
};

3 个答案:

答案 0 :(得分:3)

这很简单吗?

String query = "SELECT * FROM aprfreq";
             Statement st = conn.createStatement();
             ResultSet rs = st.executeQuery(query);
             int i =0; // this variable used to be the extension for the new key  
                     Map<String, Collection<String>> prfdata = new HashMap<String, Collection<String>>();
             List<Map<String, Collection<String>>> value = new ArrayList<Map<String, Collection<String>>>();
               while (rs.next())
                  {      
                 String prfn = rs.getString("prfn");
                 String md = rs.getString("md");
                 String prfdn = rs.getString("prfdn");
                  prfdata.put("keys"+i, Arrays.asList(prfn,md,prfdn));
                 i = i +1;
                    }
              request.setAttribute("data",prfdata); 

如果您需要在修改初始向量之前对其进行操作,如果您需要修改它,那么只需先复制一份。

答案 1 :(得分:2)

您可以这样做:

vector<int> data = {1,2,3,4,5,6,7,8,9,10};

auto current = data.cbegin();   
while (current != data.cend()) {
  for (auto it = data.cbegin(); it != data.cend(); ++it) {
    if (it != current)
      cout << *it;
  }

  cout << endl;
  ++current;
}

答案 2 :(得分:2)

您可以测试元素的 地址

#include <vector>
#include <iostream>

struct Node {
    std::string name;
    int degree;
    int counter;

    Node(std::string name, int degree, int counter)
    : name(name), degree(degree), counter(counter) // better to use init list
    {
    }
};

int main()
{
    std::vector<Node> v {{"X", 1, 5}, {"O", 3, 2}, {"B", 8, 3}};

    for(auto& node1: v) // take references
    {
        for(auto& node2: v)
        {
            // compare addresses
            if(&node1 == &node2) // & = address of operator
                continue;

            // use node1 & node2 here
            std::cout << node1.name << ' ' << node2.name << '\n';
        }
    }
}

<强>输出:

X O
X B
O X
O B
B X
B O