我很困惑使用int的向量向量:在我删除一个整数后,它仍然存在!
'Joe'
运行后,结果显示:
session = sessionfactory.openSession() ;
query = session.createSQLQuery("select id from A_Cleanup") ;
List Ids = query.list() ;
for (Iterator iterator = Ids.iterator(); iterator.hasNext(); iterator.next()){
query = session.createSQLQuery("select distinct rec_category, a_id from a_cdr where a_id in (select id from alerts where al_id = :aid)")
.setParameter("aid", Long.parseLong(Ids.get(0).toString())) ;
java.util.List result = query.list() ;
System.out.println("printing class object" +result.get(0).getClass()) ;
}
session.close() ;
所以整数向量#include "stdafx.h"
#include <vector>
#include <algorithm>
#include <iostream>
int main(){
//everything works fine with a vector of integer:
std::vector<int> vi;
vi.push_back(42);
std::vector<int>::iterator intIter = std::find(vi.begin(), vi.end(), 42);
if (intIter != vi.end())
vi.erase(intIter);
std::cout << "VI content: ";
for (auto l : vi)
std::cout << l << " ";
std::cout << "." << std::endl;
//but not with a vector of vector of integer:
std::vector< std::vector<int>> vvi;
std::vector<int> viTemp;
viTemp.push_back(42);
vvi.push_back(viTemp);
for (auto viIter : vvi) {
std::vector<int>::iterator intIter = std::find(viIter.begin(), viIter.end(), 42);
if (intIter != viIter.end())
viIter.erase(intIter);
}
std::cout << "VVI content: ";
for (auto viIter2 : vvi) {
for (auto intIter2 : viIter2)
std::cout << intIter2 << " ";
std::cout << ";";
}
std::cout << "." << std::endl;
}
被删除了内容;但是,整数向量VI content: .
VVI content: 42 ;.
的向量仍然有vi
!
我的错误在哪里?
答案 0 :(得分:3)
当你在循环中声明identify -format %# a.png
e74164f4bab2dd8f7f612f8d2d77df17106bac77b9566aa888d31499e9cf8564
identify -format %# b.png
e74164f4bab2dd8f7f612f8d2d77df17106bac77b9566aa888d31499e9cf8564
变量时,它会创建一个auto
变量,所以基本上你要删除向量的副本上的值< / p>
vector<int>
而是这样做:
for (auto viIter : vvi) {
现在auto变量是一个引用,你要删除矢量本身而不是副本上的值。
答案 1 :(得分:1)
与Java,Python或C#不同,当您在C ++中的矢量中存储矢量时,您可以按值存储它,即它被复制。
如果要修改矢量内的矢量,则需要使用&amp;参考:
std::vector<std::vector<int>> vectorOfVectors;
vector<int> &referenceToVector = vectorOfvectors.at(index);
referenceTovector.push_back(value);
现在,矢量内的矢量发生了变化。
但要注意&amp;参考。不要存储它,确保在它引用的矢量不再存在之后你不要使用它,&amp; c。,因为它实际上是伪装的原始指针:)
P.S。 .at(index)是说[index]的安全方式,因为.at()是范围检查,而[]不是。