请问vector<int> vec大小的问题?

代码如下:
vector vec = {};

int i = vec.size() - 1;

cout << i << endl;

cout << vec.size() - 1;

得到的结果上面是-1,下面却是4294967295

请问这是为什么,我的猜想是因为vec.size()是一个无符号型整型

但是我不知道应该如何验证,我用的是VS2017,请问应该怎么查看

这样我下次碰到了可以自己看下

c++

3个回答

你说的没错。
-1 对应 0xFFFFFFFF,无符号就是 2的32次方-1,也就是4294967295

caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复蜜蜜枣: 变量上点右键,转到定义
6 个月之前 回复
weixin_38252896
蜜蜜枣 好的谢谢,请问用什么语句可以查看这个变量是什么类型?
6 个月之前 回复

你的 vector 容器里没有任何值,所以长度是0,再减去一之后就是-1 。而你又说了,vec.size()返回无符号整形,所以不会出现-1(-1是有一个负号的)
所以程序会出现溢出的错误,应该是返回 unsigned int 的最大值,就是 4294967295
而int 是默认有符号的
不懂再问,希望采纳一下,谢谢!

vector.size 返回值就是 size_t
而size_t定义就是 typedef unsigned int size_t

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
定义元素为int数组的vector时出错: vector<int [10]> vec;
为什么不能这样定义?请问错在哪里? 正常的定义方式是vector<vector<int>> vec; 但是vector为什么不能直接存放数组呢?非常疑惑,求大神解答~
运用书上的朴素贝叶斯分类代码,但代码出错,怎么解决,大佬求解。。。
``` import numpy as np class Naive_bayes(object): def __init__(self,p0_vector,p1_vector,p_absolute,vocab_set): """ 输入:朴素贝叶斯实例self,p0_vector表示类别c0的单词词频P(X|c0) p1_vector 表示类别c1的单词词频P(X|c1),p_absolute 表示类别c1的概率 P(c1),单词字典vocab_set 输出:无 描述:朴素贝叶斯构造函数 """ self.p0_vector = p0_vector self.p1_vector = p1_vector self.p_absolute = p_absolute self.vocab_set = vocab_set super(Naive_bayes,self).__init__() def create_vocab_list(self,dataset): """ 输入:朴素贝叶斯实例self,训练数据集 dataset 输出: 无 描述:根据测试样本构建你单词字典 """ vocab_set = set([]) for doucument in dataset: vocab_set = vocab_set|set(doucument) self.vocab_set = list(vocab_set) def wordset2vector(self,inputset): """ 输入:朴素贝叶斯实例self,单条文本inputset 输出:文本向量 return_vec 描述:将每条文本转换为数字向量,建立于字典同等大小的文本向量,若语句中的词典在字典表中出现则标记为1,否则为0 """ return_vec = [0]*len(self.vocab_set) for word in inputset: if word in self.vocab_set: return_vec[self.vocab_set.index(word)] += 1 return return_vec def computer_conditon_probablility(self,words_vec,labels): """ 输入:朴素贝叶斯实例self,训练文本向量集合words——vec,文本标签labels 输出:无 描述:根据文本向量集合计算类别c(i)的单词词频P(X|ci)和概率P(ci) """ num_train_docs = len(words_vec) num_words = len(words_vec[0]) p0_num = np.ones(num_words) p1_num = np.ones(num_words) for i in range(num_train_docs): if labels[i] == 1: p1_num += words_vec[i] else: p0_num += words_vec[i] self.p0_vector = np.log(p0_num/sum(p0_num)) self.p1_vector = np.log(p1_num / sum(p1_num)) self.p_absolute = sum(labels)/float(num_train_docs) def fit(self,dataset,labels): """ 输入:朴素贝叶斯实例self,训练文本向量集合dataset,文本标签labels 输出:无 描述:根据训练样本集训练朴素贝叶斯分类器 """ self.create_vocab_list(dataset) # 构建样本单词字典 words_vec = [] for inputset in dataset: words_vec.append(self.wordset2vec(inputset)) # 构建文本向量 self.compute_condition_probability(words_vec,labels) # 计算条件概率P(X|ci)和类别c1的概率P(c1) def predict(self,word_vec): """ 输入:朴素贝叶斯实例self,测试文本向量word__vec 输出:word_vec所属类别 描述:利用朴素贝叶斯分类器预测文本类别 """ p0 = sum(word_vec*self.p0V) + np.log(1.0-self.p_absolute) p1 = sum(word_vec*self.p1V) + np.log(self.p_absolute) return 1 if p1 > p0 else 0 def load_dataset(filename,delimiter=" "): """ 输入:数据文件路径,分隔符 输出:数据集 描述:读取数据文件生成np.nArry类型的数据集 """ dataset = [] labels = [] with open(filename,'r') as fp: # 数据文件内容格式“Daily English Learning” while True: lines = fp.readline().strip() # lines="Daily English Learning" if not lines: break feature = lines.split(delimiter) # feature= ['daily','english','learning','1'] key = int(feature[-1]) values = [v.lower() for v in feature[0:-1]] labels.append(key) dataset.append(values) return dataset,labels if __name__ == "__main__": filename = "bayes.data" dataset,labels = load_dataset(filename) naive_bayes = Naive_bayes() naive_bayes.fit(dataset,labels) testset = ['Learning','English'] test_vec = naive_bayes.wordset2vec(testset) estimate =naive_bayes.predict(test_vec) print('[{0},{1} estimate is:{2}'.format(testset[0],testset[1],estimate)) ``` ![图片说明](https://img-ask.csdn.net/upload/202001/18/1579333779_71473.png)
关于vector的insert 、 erase、resize操作导致迭代器无效化
typedef vector<int>int_vec; int_vec v(2,0); int_vec::iterator iter_b = v.begin(); v.insert(v.begin(),1); cout<<*iter_b<<endl; //这种操作会导致iter_b无效,输出随机值 但是: int_vec v1(2,0); int_vec::iterator iter_b = v.begin(); v.erase(v.begin()); cout<<*iter_b<<endl; //却能正常输出当前vector内的第一个元素,求解释 同时: 如果insert和erase依次进行操作,事先初始化的迭代器也不会被无效化,求解释
代码问题| Vector内数据处理2
题目是两个包含整数的vector对象,编写一段程序,检验其中一个vector对象是否是另一个的前缀。我使用了迭代器和while循环进行容器数据处理,但是报错"vector iterators incompatible"。请问问题具体出在哪里? 代码如下: ``` #include<iostream> #include<string> #include<vector> using namespace std; int main() { vector<int> vec1 = { 0,1,1,2 }; vector<int> vec2 = { 0,1,1,2,3,5,8 }; auto min_vec = (vec1.size() < vec2.size()) ? vec1 : vec2; auto p = vec1.begin(); auto q = vec2.begin(); while (p != min_vec.end()&&q!=min_vec.end()) { if (*p != *q) { cout << "FALSE" << endl; break; } ++p; ++q; } if(q == min_vec.end()) cout << "TRUE" <<endl; system("pause"); return 0; } ```
利用vector<string>实现子串的查找
我想用下面这个程序实现子字符串的查找功能,为什么不行呢,大家伙帮我看看问题出在哪。。。 #include<iostream> #include<string> #include<vector> using namespace std; int findstr(vector<string> vec,string s ) { int n=0; for(vector<string>::size_type i=0;i!=vec.size();++i) if(strcmp(vec[i],s)==0) n++; return n; } void main() { vector<string> vec1; string s2("you"); string word; while(cin>>word) { vec1.push_back(word); } int k=findstr(vec1,s2); if(k==0) puts("Not find."); else cout<<s2<<" "<<k<<endl; }
关于C++ vector中存放数组,出现问题
我想定义一个vector,里面放几个数组,每个数组长度为2,数组的值由控制台输入。 先定义两个整数M,N,N表示vector中数组的数目,M是另外一个整数,答主可以不必关心。 当M=N=-1时跳出循环。整数J,F是存储在数组中的值,也由控制台输入。 然后对vector排序,排序规则定义在cmp函数中,按照J/F的值由大到小排序。 比如:对于{[7,2],[4,3],[5,2]},排序后为{[7,2],[5,2],[4,3]} 代码如下: #include <iostream> #include <vector> #include <algorithm> using namespace std; bool cmp(int a[],int b[]){ double k1=(double)(a[0]/a[1]); double k2=(double)(b[0]/b[1]); return k1<k2; } int main() { int M,N; while(true){ cin>>M; cin>>N; if(M==-1 && N==-1) break; vector<int *> vec; int arr[2]={}; for(int i=0;i<N;i++){ int J,F; cin>>J; cin>>F; arr[0]=J; arr[1]=F; vec.push_back(arr); } sort(vec.begin(),vec.end(),cmp); int b[2]={}; memcpy(b,vec.at(0),2); cout<<b[0]<<endl; } return 0; } 最后输出第一个数组的第一个数时发现不是7,而是5.经过调试发现,当输入7,2时,vector中为[7,2],继续输入[4,3]时,vector中为[4,3],[4,3],也就是第一个数组被覆盖了,继续输入 [5,2]vector中都变成了[5,2],也就是都被[5,2]覆盖了,最后排序完了输出的自然是5. 但是我不知道为什么会被覆盖,求解答
迷宫问题的代码看不懂了,求大佬注释
为啥要这么定义pos?都没怎么看懂,,,和普通01迷宫有点差别,,生成全联通迷宫找最短路径,,求大佬注释55 ``` #include "pch.h"// pch.cpp: 与预编译标头对应的源文件;编译成功所必需的 #define INT_N 999 #define MAX_DIS 2147483647 using namespace std;//using声明,使程序可以使用程序包含的任何标准C++头文件中的所有名字 Node::Node() { } Node::~Node()//析构函数 { } int Graph::findEdge(int node)//找所有节点边的位置 { int pos = node / N * (N - 1) + node % N;//定义一个节点的行值 int e = 0; if (node%N == 0)//无左邻居 { if (row[pos]) e |= Right;//就向右插边 } else if (node%N == N - 1)//无右邻 { if (row[pos - 1]) e |= Left;//就向左插边 } else { if (row[pos]) e |= Right; if (row[pos - 1]) e |= Left; } int p2 = (node%N)*(N - 1) + node / N;//定义节点的列值 if (node < N) { //无上邻居 if (col[p2]) e |= Down;//可以向下插边 } else if (node >= N * (N - 1)) { //无下邻 if (col[p2 - 1]) e |= Up;//可以向上插边 } else { if (col[p2]) e |= Down; if (col[p2 - 1]) e |= Up; } return e;//返回节点的边,存在e里,得到所有边的位置 } void Graph::make_rand(int * a) { int p = rand() % 4; int q = rand() % 4; if (p != q) { int n = a[p]; a[p] = a[q]; a[q] = n; } } int Graph::findNode(int node, int Direction) { if (Direction & Left) { if (node%N != 0) return node - 1; else return -1; } else if (Direction & Right) { if (node%N == N - 1) return -1; else return node + 1; } else if (Direction &Up) { node = node - N; if (node < 0) return -1; return node; } else if (Direction & Down) { node = node + N; if (node > N*N - 1) return -1; return node; } return -1; } int Graph::findNode2(int node, int Direction) { int pos = node / N * (N - 1) + node % N; int pos2 = (node%N)*(N - 1) + node / N; if (Direction & Left) { if (node%N != 0 && row[pos - 1]) return node - 1; else return -1; } else if (Direction & Right) { if (node%N != (N - 1) && row[pos]) return node + 1; else return -1; } else if (Direction &Up) { node = node - N; if (node >= 0 && col[pos2 - 1]) return node; return -1; } else if (Direction & Down) { node = node + N; if (node > N*N - 1) return -1; if (col[pos2]) return node; return -1; } return -1; } void Graph::addEdge(int node, int Direction) { if (Direction & Left || Direction & Right) { //左右方向-- int pos = node / N * (N - 1) + node % N; if ((Direction & Left) && node%N != 0) row[pos - 1] = true; if ((Direction & Right) && node%N != N - 1) row[pos] = true; } if (Direction & Up || Direction & Down) { //上下方向-- int p2 = (node%N)*(N - 1) + node / N; if ((Direction & Down) && node < N*(N - 1)) col[p2] = true; if ((Direction &Up) && node > (N - 1)) col[p2 - 1] = true; } } void Graph::insertEdge(int from) { //从from起 插入条边 bool add = false; for (int start = from; start < 2 * N*(N - 1); start++) { int pos = 0; int r = start / (2 * N - 1); int c = start % (2 * N - 1); if (c > N - 1) { //列 pos = (c - (N - 1))*(N - 1) + r; if (col[pos] == false) { col[pos] = true; //add = true; return; } } else { //行 pos = r * (N - 1) + c; if (row[pos] == false) { row[pos] = true; return; } } } for (int start = from; start >= 0; start--) { int pos = 0; int r = start / (2 * N - 1); int c = start % (2 * N - 1); if (c > N - 1) { //列 pos = (c - (N - 1))*(N - 1) + r; if (col[pos] == false) { col[pos] = true; //add = true; return; } } else { //行 pos = r * (N - 1) + c; if (row[pos] == false) { row[pos] = true; return; } } } } void Graph::test(int node) { int e = findEdge(node); printf("node=%d,Up=%d,Down=%d,Left=%d,Right=%d", node, e&Up, e&Down, e&Left, e&Right); } Graph::Graph(int n) { N = n; if (N < 2) N = 2; row = new bool[N*(N - 1)]; col = new bool[N*(N - 1)]; } Graph::~Graph() { delete col; delete row; } bool Graph::travel(int start, vector<int> & visit, bool * have) { int count = N * N; int order[4] = { Left,Right,Up,Down }; int c = 0; int node2 = 0; while (visit.size() < count) { if (c == 0) { c = 1; } else start = visit.back(); //随机找一个方向开始-- make_rand(order); bool insert = false; for (int j = 0; j < 4; j++) { node2 = findNode(start, order[j]); if (node2 >= 0 && have[node2] == false) { visit.push_back(node2); have[node2] = true; addEdge(start, order[j]);//添加这个方向的边 insert = true; break; } } if (insert == false) return false; } return true; } void Graph::create() { srand((unsigned)time(NULL)); int total = N * N; bool * have = new bool[total]; int i = 0; for (i = 0; i < total; i++) have[i] = false; for (i = 0; i < N*(N - 1); i++) { row[i] = false; col[i] = false; } vector<int> visit;//已访问的节点表 vector<int> starts;//起点表 int start = rand() % total; visit.insert(visit.end(), start); have[start] = true; starts.push_back(start); bool ok = travel(start, visit, have); while (ok == false) { start = visit[rand() % visit.size()]; int nRet = std::count(starts.begin(), starts.end(), start); if (nRet > 0) { for (int j = 0; j < visit.size(); j++) { start = visit[j]; nRet = std::count(starts.begin(), starts.end(), start); if (nRet == 0) break; } } ok = travel(start, visit, have); starts.push_back(start); } //随机 添加一部分边-- int max = 2 * N * (N - 1); int min = N * N - 1; int need = (max + min) / 2; for (int k = min; k <= need; k++) { //--暂时留空-- int edge = rand() % max;//随机增加的边 //随机找一个起点,增加一个边 insertEdge(edge); } delete have; } void Graph::print() { int i, pos, pos2; char buf[300]; char buf2[300]; char buf3[10]; int max = N * N - 1; sprintf_s(buf3, "%d", max); int len = strlen(buf3); memset(buf3, 0, 10); for (i = 0; i < N*N; i++) { if (i%N == 0) { if (i > 0) { printf("%s\n", buf); printf("%s\n", buf2); } memset(buf, 0, 300); memset(buf2, 0, 300); memset(buf3, 0, 10); } if (len == 1) sprintf_s(buf3, "%d", i); else if (len == 2) sprintf_s(buf3, "%02d", i); else if (len == 3) sprintf_s(buf3, "%03d", i); else if (len == 4) sprintf_s(buf3, "%04d", i); else { printf("too big"); return; } strcat_s(buf, buf3); pos = i / N * (N - 1) + i % N;//(N-1); if (i%N != (N - 1)) { if (row[pos]) strcat_s(buf, "-"); else strcat_s(buf, " "); } pos2 = (i%N)*(N - 1) + i / N; if (i < N*(N - 1)) { if (col[pos2]) { if (len == 1) strcat_s(buf2, "| "); else if (len == 2) strcat_s(buf2, " | "); else if (len == 3) strcat_s(buf2, " | "); else if (len == 4) strcat_s(buf2, " | "); } else { if (len == 1) strcat_s(buf2, " "); else if (len == 2) strcat_s(buf2, " "); else if (len == 3) strcat_s(buf2, " "); else if (len == 4) strcat_s(buf2, " "); } } } printf("%s\n", buf); printf("%s\n", buf2); } void Graph::print2() { int i, pos, pos2; char buf[300]; char buf2[300]; char buf3[10]; int max = N * N - 1; sprintf_s(buf3, "%d", max); int len = strlen(buf3); memset(buf3, 0, 10); for (i = 0; i < N*N; i++) { if (i%N == 0) { if (i > 0) { printf("%s\n", buf); printf("%s\n", buf2); } memset(buf, 0, 300); memset(buf2, 0, 300); memset(buf3, 0, 10); } if (len == 1) sprintf_s(buf3, "%d", i); else if (len == 2) sprintf_s(buf3, "%02d", i); else if (len == 3) sprintf_s(buf3, "%03d", i); else if (len == 4) sprintf_s(buf3, "%04d", i); else { printf("too big"); return; } strcat_s(buf, buf3); pos = i / N * (N - 1) + i % N;//(N-1); if (i%N != (N - 1)) { if (row[pos]) strcat_s(buf, "--"); else strcat_s(buf, " "); } pos2 = (i%N)*(N - 1) + i / N; if (i < N*(N - 1)) { if (col[pos2]) { if (len == 1) strcat_s(buf2, "| "); else if (len == 2) strcat_s(buf2, " | "); else if (len == 3) strcat_s(buf2, " | "); else if (len == 4) strcat_s(buf2, " | "); } else { if (len == 1) strcat_s(buf2, " "); else if (len == 2) strcat_s(buf2, " "); else if (len == 3) strcat_s(buf2, " "); else if (len == 4) strcat_s(buf2, " "); } } } printf("%s\n", buf); printf("%s\n", buf2); } int Graph::edgeCount() { int edge = 0; int Count = N * (N - 1); for (int i = 0; i < Count; i++) { if (row[i]) edge++; if (col[i]) edge++; } return edge; } void Graph::path(int st, int en) { if (st == en) { printf("%d %d", st, en); return; } stack<int> nodes; stack<int> edges; int Direction[4] = { Left,Up,Right,Down }; bool * visited = new bool[N*N]; int i = 0; for (i = 0; i < N*N; i++) visited[i] = false; nodes.push(st); edges.push(-1); visited[st] = true; //visit.push(st); while (nodes.empty() == false) { int n = nodes.top(); int dir = edges.top(); int n2 = -1; while (dir < 3 && n2 < 0) {//dir={-1,0,1,2}=>{0,1,2,3} dir++; n2 = findNode2(n, Direction[dir]); //是否可通-- if (n2 >= 0) { if (visited[n2]) n2 = -1; else break; } } if (n2 < 0) { visited[n] = false;//退出该节点了 nodes.pop(); edges.pop(); } else { edges.pop(); edges.push(dir); if (n2 == en) { //找到了-- //stack<int> print = nodes; nodes.push(n2); print_stack(nodes); nodes.pop(); int dir2 = edges.top(); if (dir2 == 3) { //退栈-- int n3 = nodes.top(); nodes.pop(); edges.pop(); visited[n3] = false; } } else { nodes.push(n2); edges.push(-1); visited[n2] = true; } } } delete visited; } void Graph::shortpath(int st, int en) { if (st == en) { printf("%d %d", st, en); return; } vector< stack<int> > pathes;//所有的路径 int path_len = N * N + 1;//路径长度,最大 stack<int> nodes; stack<int> edges; int Direction[4] = { Left,Up,Right,Down }; bool * visited = new bool[N*N]; int i = 0; for (i = 0; i < N*N; i++) visited[i] = false; nodes.push(st); edges.push(-1); visited[st] = true; //visit.push(st); while (nodes.empty() == false) { //判断当前路径是否超出了最短路径--- if (nodes.size() > path_len) { int n3 = nodes.top(); visited[n3] = false; nodes.pop(); edges.pop(); continue; } int n = nodes.top(); int dir = edges.top(); int n2 = -1; while (dir < 3 && n2 < 0) {//dir={-1,0,1,2}=>{0,1,2,3} dir++; n2 = findNode2(n, Direction[dir]); //是否可通-- if (n2 >= 0) { if (visited[n2]) n2 = -1; else break; } } if (n2 < 0) { visited[n] = false;//退出该节点了 nodes.pop(); edges.pop(); } else { edges.pop(); edges.push(dir); if (n2 == en) { //找到了-- //stack<int> print = nodes; nodes.push(n2); if (nodes.size() < path_len) { pathes.clear(); pathes.push_back(nodes); path_len = nodes.size(); } else if (nodes.size() == path_len) { pathes.push_back(nodes); } printf("path_len=%d\n", path_len); nodes.pop(); int dir2 = edges.top(); if (dir2 == 3) { //退栈-- int n3 = nodes.top(); nodes.pop(); edges.pop(); visited[n3] = false; } } else { nodes.push(n2); edges.push(-1); visited[n2] = true; } } } delete visited; print_pathes(pathes);//输出所有的路径 } void Graph::print_stack(stack<int> nodes) { vector<int> list; while (nodes.empty() == false) { list.insert(list.begin(), nodes.top()); nodes.pop(); } bool first = true; for (auto val : list) { if (first) printf("%d", val); else printf(" %d", val); first = false; } printf("\n"); } void Graph::print_stack2(stack<int> path) { bool first = true; while (path.empty() == false) { if (first) printf("%d", path.top()); else printf(" %d", path.top()); first = false; path.pop(); } printf("\n"); } void Graph::print_pathes(vector<stack<int>> pathes) { for (auto val : pathes) { print_stack(val); //printf("\n"); } } void Graph::dfs_start() { stack<int> path; bool * visited = new bool[N*N]; for (int i = 0; i < N*N; i++) visited[i] = false; dfs(visited, path, 0); print_stack(path); delete visited; } void Graph::dfs(bool * visited, stack<int>& path, int v) { int Direction[4] = { Left,Up,Right,Down }; visited[v] = true; path.push(v); for (int i = 0; i < 4; i++) { int n = findNode2(v, Direction[i]); if (n >= 0 && visited[n] == false) { dfs(visited, path, n); } } } void Graph::shortpath2(int from, int to) { if (from < 0 || from >= N * N || to < 0 || to >= N * N) { printf("输入错误。\n"); return; } if (from == to) { printf("%d %d\n", from, to); return; } vector<Node> nodes;//节点次序 nodes.resize(N*N);// reserve(N*N); vector<int> S, U; //U.resize(N*N);// reserve(N*N); int i = 0; for (i = 0; i < N*N; i++) { //将所有的节点-按次序存入nodes nodes[i].id = i; nodes[i].dis = Juli(from, i); if (nodes[i].dis == 1) {//记下前驱节点 nodes[i].prev.push_back(from); } if (i != from) U.push_back(i);//其他节点存入U中 } int sindex = 0; S.push_back(from); //--开始计算过程 while (U.empty() == false) { vector<int> nodelist;//节点编号表,具体情况查nodes //int size = S.size(); for (; sindex < S.size(); sindex++) { //查找u中,距离S[index]最近的节点,形成节点表 int d = MAX_DIS; for (int u : U) { if (contains(nodes[u].prev, S[sindex])) {//前驱节点是s[i] if (nodes[u].dis < d) { nodelist.clear(); nodelist.push_back(u); d = nodes[u].dis; } else if (nodes[u].dis == d && d != MAX_DIS) { nodelist.push_back(u);//同样距离的点 } } } //将nodelist的值加入到S中,并从U中去掉 for (int n : nodelist) { S.push_back(n); U.erase(std::remove(std::begin(U), std::end(U), n), std::end(U)); } //--用nodelist的值更新-nodes中的距离和前驱 for (int n : nodelist) { // //若-以n为中间节点距离更短,则将nodes中的当前节点的前驱修改为n for (int u : U) { int d = Juli(n, u);//计算两点间的距离 if (d != MAX_DIS) { if (nodes[n].dis + d < nodes[u].dis) { nodes[u].prev.clear(); nodes[u].prev.push_back(n);//以n为前驱 nodes[u].dis = nodes[n].dis + d; } else if (nodes[n].dis + d == nodes[u].dis) { //同样距离的点 nodes[u].prev.push_back(n); } } } } nodelist.clear(); } } //遍历nodes,输出所有的路径-- allpath(from, to, nodes); } int Graph::Juli(int from, int to) { if (from == to) return 0; if (findNode2(from, Left) == to) return 1; if (findNode2(from, Up) == to) return 1; if (findNode2(from, Right) == to) return 1; if (findNode2(from, Down) == to) return 1; return MAX_DIS; } bool Graph::contains(vector<int> vec, int val) { int nRet = count(vec.begin(), vec.end(), val); return nRet > 0; } void Graph::allpath(int from, int to, vector<Node>& nodes) { stack<int> path; allpath_dfs(path, to, nodes, from); } void Graph::allpath_dfs(stack<int>& path, int to, vector<Node>& nodes, int src) { path.push(to); if (to == src) { print_stack2(path); path.pop(); return; } vector<int> prevlist = nodes[to].prev;//前驱节点 for (int v : prevlist) { allpath_dfs(path, v, nodes, src); } path.pop(); } int main() { int N = 2; printf("输入边的大小 N="); scanf_s("%d", &N); Graph g(N); g.create();//生成迷宫 g.print();//输出迷宫 printf("\nedge count=%d\n", g.edgeCount());//迷宫现有的边数 /* g.test(0); g.test(4); g.test(10); */ g.dfs_start();//深度优先遍历,证明迷宫的连通性 int from=0, to=0; printf("输入起点:"); scanf_s("%d", &from); printf("输入终点:"); scanf_s("%d", &to); printf("计算从%d到%d的最短路径有:\n",from,to); return 0; } ```
关于STL vector的遍历问题,请问怎样一边操作一边遍历删除?
#include<stdio.h> #include<vector> #include<iostream> #include <pthread.h> #include <unistd.h> using namespace std; typedef struct rect { int id; int length; int width; }Rect; vector<Rect> vec; void * add(void *argc) { int i; Rect r; while(1){ sleep(1); for(i=0;i<10;i++){ r.id=i; r.length=i; r.width=i; vec.push_back(r); } } return NULL; } void * delete4(void *argc){ while(1){ vector<Rect>::iterator it=vec.begin(); for(it=vec.begin(); it!=vec.end();) { if(it->id== 4) { //将it赋值为erase()的返回值,它指向the new location of the element that followed the last element erased vec.erase(it); } else ++it; } } return NULL; } int main() { pthread_t tidp1; pthread_t tidp2; pthread_create(&tidp1,NULL,add,NULL); pthread_create(&tidp2,NULL,delete4,NULL); while(1){ sleep(2); vector<Rect>::iterator it=vec.begin(); for(it=vec.begin(); it!=vec.end(); ++it) cout<<it->id<<endl; } return 0; } ``` ```
vector类型静态成员变量 overflow的问题
#include<iostream> #include<vector> #include<iterator> using namespace std; class CMyClass { public: CMyClass(){} CMyClass(int a) { this->m_nValue = a; vec.push_back(*this); } ~CMyClass() { /*不知道怎么指向当前类*/ vector<CMyClass>::iterator it; for (it = vec.begin(); it != vec.end(); it++) { if (it->vec == *this) vec.erase(it); } //int length = vec.size(); //for (int i = 0; i < length; i++) //{ // if (&vec[i] == this) // { // CMyClass temp = vec[i]; // // } /* }*/ //for (it=vec.begin(); it != vec.end(); it++) //{ // if (vec[]) // vec.erase(it); //} //cout << "delete d" << endl; } friend bool operator==(vector<CMyClass>v, CMyClass& c2) { int length = v.size(); for (int i = 0; i < length; i++) { if (&v[i] == &c2) return true; } return false; } friend ostream& operator<<(ostream& out, CMyClass& c) { out << c.m_nValue << endl; return out; } static void ShowList() { vector<CMyClass>::iterator it; for (it = vec.begin(); it != vec.end(); it++) { cout << *it; } } private: int m_nValue; static vector<CMyClass>vec; }; vector<CMyClass>CMyClass::vec; int main() { CMyClass a(100); CMyClass b(1); CMyClass c; CMyClass* d = new CMyClass; *d = 10; cout << "The first end:" << endl; CMyClass::ShowList(); if (1) { CMyClass e(1000); cout << "The second end:" << endl; CMyClass::ShowList(); } delete d; cout << "The third end:" << endl; CMyClass::ShowList(); return 0; } 类里的vector类型静态成员变量,目的是创建新对象时把它加入到容器中,析构时反之 现在出现overflow的问题
一个简单的C++练习,运行时显示“vector iteration incompatible"。
array<int, 11> ar = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 55, 89 }; vector<int> vec(ar.begin(), ar.end()); auto it = vec.begin(); while (it != vec.end()) { if (*it % 2) vec.erase(it); else it++; } for (auto i : vec) cout << i;
关于vector用法报错,求大神指教
严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) E1087 没有与参数列表和对象匹配的 重载函数 "std::vector<_Ty, _Alloc>::push_back [其中 _Ty=int, _Alloc=std::allocator<int>]" 实例(对象包含阻止匹配的类型限定符) 图书信息管理 C:\Users\source\repos\图书信息管理\图书信息管理\BookManage.cpp 163 ```c vector<int> vec; int BookManage::search_by_keyword(string s) const { for (int i = 0; i < size - 1; i++) { if (books[i].getBookName.find(s) != string::npos) { vec.push_back(i);//163行 } } } ```
C++模板中使用STL迭代器的问题:vector<T>::iterator声明报错的原因及解决方法
#include<iostream> #include<vector> #include<iterator> using namespace std; template<class T> void test_iter(const vector<T>); int main() { vector<string> vec_str{ "Anthony","Chou","Jay","Hahaha" }; test_iter(vec_str); system("pause"); return 0; } template<class T> void test_iter(const vector<T> vec) { typename vector<T>::iterator iter; for (iter = vec.begin(); iter != vec.end(); iter++) { cout << *iter << endl; } } 上述代码报错,原因是我使用的: vector<T>::iterator iter; vs2017中错误显示如下: 错误 C2679 二进制“=”: 没有找到接受“std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>”类型的右操作数的运算符(或没有可接受的转换) 错误 C2679 二进制“<<”: 没有找到接受“std::basic_string<char,std::char_traits<char>,std::allocator<char>>”类型的右操作数的运算符(或没有可接受的转换) 我试过不使用泛型而使用: vector<int>::iterator iter; 来声明具体类型的迭代器就没有问题。 求大神解答,多谢。
malloc(): memory corruption (fast): C++ opencv编写出错
好象是亮度调整那里出错了,可是不知道怎么改 ``` int main(){ Mat re_src_image; Mat src_image = imread("/home/zn/桌面/13740146-f01b848b12b93174.png",1); if(! src_image.data){ cout << "Couldn't find the image!\n"; return false; } else { resize(src_image, re_src_image, Size(640, 480)); vector<Mat> channels; split(re_src_image, channels); re_src_image = channels.at(2); } //亮度调整 int ContrastValue = 100; int BrightValue = 0; Mat light_image = Mat::zeros(re_src_image.size(), re_src_image.type()); for (int y = 0; y < re_src_image.rows; y++) { for (int x = 0; x < re_src_image.cols; x++) { for (int c = 0; c < 3; c++){ light_image.at<Vec3b>(y, x)[c] = (ContrastValue*0.01)*(re_src_image.at<Vec3b>(y, x)[c]) + BrightValue; } } } imshow("a",re_src_image); while(1){ if(waitKey(0)==27) break; } return 0; } ```
小白关于c++指针的一些疑问
1.在一些定义中(比如int *p=new int[5] ; int *p=arrayname)p知不知道自己的范围? 2.如果有范围的指针做右值,它会把自己的范围也赋给左值吗? 3.vector<int>vec; vec.begin()是一个iterator,&vec[0]是一个vector<int>*类型,但是他们的意义都是一样的,指向vec的第一个元素,他们可以判断是否相等吗?
递归排序用C++写,结果不对,求大神改
//这是源代码,求帮忙改出正确结果 #include<iostream> #include<stdlib.h> #include<vector> #define random(x) (rand()%x) void merge(std::vector<int>&vec,int p,int q,int r){ std::vector<int>vec1; std::vector<int>vec2; for(int i=p;i<=q;i++) vec1.push_back(vec[i]); for(i=q+1;i<=r;i++) vec2.push_back(vec[i]); i=0; int j=0; for(int k=p;k<=r;k++){ if(vec1[i]<vec2[j]){ vec[k]=vec1[i]; i++; } else{ vec[k]=vec2[j]; j++; } } } void mergesort(std::vector<int>&vec,int p1,int p2){ int q=(p1+p2)/2; if(p2==p1) return; mergesort(vec,p1,q); mergesort(vec,q+1,p2); merge(vec,p1,q,p2); } int main(){ const int size =10; const int range=1000; std::vector<int>vec; std::cout<<"Before merge sort:"<<std::endl; for(int i=0;i<size;i++){ vec.push_back(random(range)); std::cout<<vec[i]<<' '; } std::cout<<std::endl<<"After merge sort:"<<std::endl; mergesort(vec,0,size-1); for( i=0;i<size;i++){ std::cout<<vec[i]<<' '; } std::cout<<std::endl; return 0; }
C++的函数对象与二元谓词的问题
#include <iostream> #include <vector> #include <set> #include <algorithm> #include<functional> bool ab(int mem1, int mem2) { if (mem1 > mem2) return true; else return false; } int main() { vector<int> vec; vec.push_back(7); for (int i = 0; i < 10; i++) { vec.push_back(i); } cout<< *max_element(vec.begin(), vec.end(), ab)<<endl; system("pause"); return 0; } 为什么这样就输出的是0?难道二元谓词只能用“<”的? 求解答!!1
函数返回一个智能指针怎么释放它的内存?
``` #include "pch.h" #include <iostream> #include<string> #include<memory> #include<vector> using namespace std; using T = shared_ptr<vector<int>>; T func(){ T vec=make_shared<vector<int>>(); return vec; } T func_1(T vec) { int value; while (cin>>value) { vec->push_back(value); } return vec; } void func_2(T vec) { for (auto elem : *vec) { cout << elem; } } int main() { func_2(func_1(func())); } ``` 这是我在做C++primer的一道课后题遇到的疑问,这里func()返回的智能指针计数不会为0 怎么释放它对应的内存呢?
vector<class user> vec中的数据如何写入文件中并读取出来。
#include<iostream> #include<fstream> #include<vector> #include<string> #include<iterator> using namespace std; using std::ostream_iterator; using std::istream_iterator; class user{ public: user(){}; ~user(){}; string name; string id; string sex; }; istream & operator >>(istream & in, const user & x) { in.read((char *)(user *)&x, sizeof(user)); return in; } ostream & operator<<(ostream & out, const user & x) { out.write((char *)(user *)&x, sizeof(user)); return out; } int main() { vector<user> u; user u1; ofstream ofs; ofs.open("JAR.txt",ios_base::binary); for(int i=0;i<3;i++) { cin>>u1.name>>u1.id>>u1.sex; u.push_back(u1); } copy(u.begin(),u.end(),ostream_iterator<user>(ofs)); ifstream ifs("JAR.txt", ios_base::binary); istream_iterator<user> iecg(ifs),iend; vector <user> v(iecg,iend); vector <user> x; copy(v.begin(),v.end(),x.begin()); cout<<u.size()<<v.size()<<x.size()<<endl; for(int i=0;i<x.size();i++) { cout<<x.at(i).name<<x.at(i).id<<x.at(i).sex<<endl;; } } 类似这样。
cout 与iterator,提示无可接受的转换
cout<<search_vec(vec.begin(), vec.end(), 2)-vec.begin();可以运行。 cout<<search_vec(vec.begin(), vec.end(), 2);提示如下: 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C2679 二进制“<<”: 没有找到接受“std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>”类型的右操作数的运算符(或没有可接受的转换) 20160601 c:\users\liuhui\documents\visual studio 2015\projects\20160601\20160601\20160601.cpp 22 原因是两个迭代器相减,发生隐性转换了? 以下为代码: #include "stdafx.h" #include <vector> #include <iostream> using namespace std; vector<int>::iterator search_vec(vector<int>::iterator beg, vector<int>::iterator end, int val) { for (; beg != end; beg++) if (*beg == val) return beg; return end; } int main() { vector<int> vec = { 1,2,3,4,5,6 }; cout<<search_vec(vec.begin(), vec.end(), 2)-vec.begin()<<endl; cout << search_vec(vec.begin(), vec.end(), 2);//此处为报错处 return 0; }
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、PDF搜索网站推荐 对于大部
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Vue + Spring Boot 项目实战(十四):用户认证方案与完善的访问拦截
本篇文章主要讲解 token、session 等用户认证方案的区别并分析常见误区,以及如何通过前后端的配合实现完善的访问拦截,为下一步权限控制的实现打下基础。
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入  假设现有4个人
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
漫话:什么是平衡(AVL)树?这应该是把AVL树讲的最好的文章了
这篇文章通过对话的形式,由浅入深带你读懂 AVL 树,看完让你保证理解 AVL 树的各种操作,如果觉得不错,别吝啬你的赞哦。 1、若它的左子树不为空,则左子树上所有的节点值都小于它的根节点值。 2、若它的右子树不为空,则右子树上所有的节点值均大于它的根节点值。 3、它的左右子树也分别可以充当为二叉查找树。 例如: 例如,我现在想要查找数值为14的节点。由于二叉查找树的特性,我们可...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
开源并不是你认为的那些事
点击上方蓝字 关注我们开源之道导读所以 ————想要理清开源是什么?先要厘清开源不是什么,名正言顺是句中国的古代成语,概念本身的理解非常之重要。大部分生物多样性的起源,...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
      11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下
《C++ Primer》学习笔记(六):C++模块设计——函数
专栏C++学习笔记 《C++ Primer》学习笔记/习题答案 总目录 https://blog.csdn.net/TeFuirnever/article/details/100700212 —————————————————————————————————————————————————————— 《C++ Primer》习题参考答案:第6章 - C++模块设计——函数 文章目录专栏C+...
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
so easy! 10行代码写个"狗屁不通"文章生成器
前几天,GitHub 有个开源项目特别火,只要输入标题就可以生成一篇长长的文章。背后实现代码一定很复杂吧,里面一定有很多高深莫测的机器学习等复杂算法不过,当我看了源代码之后这程序不到50
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的 回答 - Bravo Yeung,获得该问题下回答中得最高赞(236赞和1枚专业勋章),对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalk
相关热词 c#选择结构应用基本算法 c# 收到udp包后回包 c#oracle 头文件 c# 序列化对象 自定义 c# tcp 心跳 c# ice连接服务端 c# md5 解密 c# 文字导航控件 c#注册dll文件 c#安装.net
立即提问