删除矢量向量中的错误

时间:2016-10-15 11:41:30

标签: c++ vector

我很困惑使用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

我的错误在哪里?

2 个答案:

答案 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()是范围检查,而[]不是。