在迭代 vector<> 时获取除第 i 个以外的所有其他元素
Posted
技术标签:
【中文标题】在迭代 vector<> 时获取除第 i 个以外的所有其他元素【英文标题】:while iterating over vector<> get all other elements but ith 【发布时间】:2015-09-02 23:22:59 【问题描述】:假设我们有一个大小为 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;
;
【问题讨论】:
您需要从所有其他元素中获得什么样的信息?你能展示你的“结构”并更具体一点吗? @P0W 我添加了更多信息以及我从结构中得到的信息。 @听起来像一个图形问题,发布的答案可以解决问题,但您可能会考虑更好的选择。对不起,我不是算法忍者 @P0W 感谢您的输入! 【参考方案1】:这么简单?
vector<int> data = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;
int ii = 0;
for (int i : data)
int jj = 0;
for (int j : data)
if (ii == jj) continue;
// do your stuff
jj++
ii++
如果在修改之前需要对初始向量进行操作,如果需要修改,那就先复制一份。
【讨论】:
啊,我一直低着头,甚至没有考虑过切换到两个这样的 for 循环。谢谢! @hownowbrowncow:是的,两个循环中没有任何内容取决于向量内容(此类代码属于// do your stuff
部分)。【参考方案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;
【讨论】:
【参考方案3】:您可以测试元素的地址:
#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
【讨论】:
购买啤酒的冲动加剧以上是关于在迭代 vector<> 时获取除第 i 个以外的所有其他元素的主要内容,如果未能解决你的问题,请参考以下文章